UAC на Win Server 2008 вызывает у меня головную боль! - PullRequest
1 голос
/ 04 июня 2010

Мой установщик развертывает исполняемый файл конфигурации, который используется для выполнения некоторых базовых настроек в службе Windows, которая также установлена. Exe также необходимо создать и записать некоторые ключи реестра. В среде Windows Server 2008 эти ключи не могут быть созданы. Я проверил и обнаружил, что это привилегия администратора, и исполняемый файл не запрашивает разрешения администратора, необходимые для UAC в 2008 г. Однако это не идеально, так как это дополнительный шаг, который я должен уведомить наших клиентов о выполнении. Существуют ли другие способы повышения прав администратора при запуске exe?

1 Ответ

1 голос
/ 04 июня 2010

Поместите манифест на или с exe. Я могу рассказать вам, как встроить манифест с помощью Visual Studio, если вы дадите мне знать, какую версию вы используете. Если вы не используете Visual Studio или не собираете exe-файл, вы можете просто поместить файл манифеста в ту же папку, что и exe-файл, и это тоже будет работать. В этом случае файл должен быть назван так же, как ваш exe, с .manifest в конце, например, для foo.exe это foo.exe.manifest. Контент должен выглядеть так:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the 
            requestedExecutionLevel node with one of the following.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            If you want to utilize File and Registry Virtualization for backward 
            compatibility then delete the requestedExecutionLevel node.
        -->
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

Обратите внимание, что все возможные значения для selectedExecutionLevel находятся здесь в комментарии, и этот использует requireAdministrator. Теперь он всегда будет повышаться и, следовательно, работать на вас.

...