Servidor 2008 não pode definir os direitos do usuário
-
27-09-2019 - |
Pergunta
Tentei fazer algumas coisas do Win32 no C# 3.5 para obter direitos de usuário elevados para um aplicativo de console. Eu desenvolvo no Visual Studio 2008 SP1/GDR e as coisas funcionam bem quando são executadas sob o depurador. As coisas também funcionam bem quando eu executo o aplicativo Console Stand-Agone. As coisas também funcionam bem quando eu empacote tudo em um MSI e instalo em um servidor de 2003 e executo o aplicativo Console.
Se eu pegar o mesmo MSI e instalá -lo em um servidor de 2008 com o UAC ativado, execute o aplicativo Console, recebo mensagens como esta:
Unable to set right for the account "DOMAIN\QAUSER": SeCreateGlobalPrivilege
System.UnauthorizedAccessException Attempted to perform an unauthorized operation.
Não posso esperar que meus administradores de implantação/servidor façam qualquer coisa com meu aplicativo além de instalá -lo e eles não vão desativar o UAC. Deve haver uma maneira programática de definir corretamente os direitos do usuário que eu posso adicionar ao aplicativo Console - alguém sabe como?
Obrigado.
Solução
Provavelmente você usa "Global "prefixo Para o nome do objeto em seu aplicativo e seu aplicativo será iniciado dentro de um host de sessão de desktop remoto (host de sessão rd) sessão do servidor. No caso do seu programa, tem que ativar SE_CREATE_GLOBAL_NAME (SeCreateGlobalPrivilege
) privilégio. Ver C# - Como ativar o Sedebugprivilege? (mas use SE_CREATE_GLOBAL_NAME
ao invés de SE_DEBUG_NAME
) ou Manipular privilégios em código gerenciado de maneira confiável, segura e eficiente como um exemplo.
Outras dicas
Presumo que o UAC esteja ativado na máquina de 2008 e ainda não posso comentar sua pergunta para descobrir.
Nesse caso, verifique se, no seu App.Manifest File in Vs (em Propriedades), altere
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
para
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Mesmo que o código esteja em execução como administrador, você deve obter o aviso da UAC.