Конфигурационный файл записывается в VirtualStore, но читается из ProgramData

У меня есть приложение, которое использует конфиг.xml-файл, который хранится в C:ProgramDataMyApp

файл конфигурации создается и редактируется с помощью MyConfigApp.exe, а затем прочитать фактическое приложение MyApp.исполняемый.

во время установки я вошел в систему как администратор и все работало идеально!.
Затем мы вошли в систему как обычный пользователь,и он отлично работал здесь.

Затем нам нужно было изменить конфигурацию. Это то, что пользователь должен быть в состоянии сделать, поэтому мы начали MyConfigApp.exe и изменил конфигурацию.

но изменение никогда не было прочитано в MyApp.исполняемый.

Я открыл c:ProgramDataMyAppconfig.xml и старые значения, где в нем.

теперь мы обнаружили, что у пользователя нет прав на запись в каталог ProgramData. Таким образом, Windows создала новый файл в VirtualStore, который не используется из MyApp.exe

мы добавили права записи в ProgramData (и подкаталоги) и удалили конфигурация.xml-файл из VirtualStore.

но каждый раз, когда пользователь запускает MyConfigApp.exe создаст файл в VirtualStore!

как сделать MyConfigApp.exe читать и писать файл в ProgramData?

29
задан Andis59
20.01.2023 3:40 Количество просмотров материала 2509
Распечатать страницу

1 ответ

я решил это с моим приложением наследия, создав .manifest файл, который находится рядом с exe. Никаких реальных проблем, просто текстовый файл с именем MyConfigApp.exe.manifest который содержит что-то вроде кода XML ниже.

согласно Microsoft, (см.https://msdn.microsoft.com/en-us/library/bb756929.aspx) EXE-файл с параллельным файлом манифеста, подобным приведенному ниже, не будет участвовать в виртуализации файловой системы, поскольку запрашивается определенный уровень выполнения, и поэтому не будет добавлять вещи в VirtualStore пользователя.

Однако, имейте в виду, что система будет используйте VirtualStore, если там уже есть файлы. Вот код манифеста:

<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    version="**your version number, make sure the numbers match the EXE**"
    processorArchitecture="X86"
    name="MyConfigApp"
    type="win32"
    />
  <description>SOLIDCast</description>
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
       <application>
           <!-- Windows 8.1 -->
            <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
           <!-- Windows 8 -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
           <!-- Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
           <!-- Windows Vista -->
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
       </application>
    </compatibility>
<!-- Identify the application security requirements: Vista and above -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
      <security>
        <requestedPrivileges>
          <requestedExecutionLevel
            level="asInvoker"
            uiAccess="false"
            />
        </requestedPrivileges>
      </security>
  </trustInfo>
1
отвечен Rob Perkins 2023-01-21 11:28

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх