3

我试图在 C# 3.5 中做一些 Win32 的东西来为控制台应用程序获得提升的用户权限。我在 Visual Studio 2008 SP1/GDR 上开发,在调试器下运行时一切正常。当我单独运行控制台应用程序时,事情也很好。当我将所有内容打包到 MSI 中并将其安装在 2003 服务器上并运行控制台应用程序时,事情也运行良好。

如果我采用相同的 MSI 并将其安装在启用了 UAC 的 2008 服务器上,然后运行控制台应用程序,我会收到如下消息:

Unable to set right for the account "DOMAIN\QAUSER": SeCreateGlobalPrivilege
System.UnauthorizedAccessException    Attempted to perform an unauthorized operation.

我不能指望我的部署/服务器管理员除了安装它之外对我的应用程序做任何事情,而且他们不会关闭 UAC。必须有一些编程方式来正确设置我可以添加到控制台应用程序的用户权限 - 任何人都知道如何?

谢谢。

4

2 回答 2

1

可能您在应用程序中对对象名称使用“ Global\”前缀,并且您的应用程序将在远程桌面会话主机(RD 会话主机)服务器会话中启动。如果您的程序必须启用SE_CREATE_GLOBAL_NAME ( SeCreateGlobalPrivilege) 权限。请参阅C# – 如何启用 SeDebugPrivilege?(但使用SE_CREATE_GLOBAL_NAME而不是SE_DEBUG_NAME)或以可靠、安全和高效地操作托管代码中的权限为例。

于 2010-10-17T22:00:47.727 回答
0

我假设在 2008 机器上启用了 UAC,我还不能评论您的问题以找出答案。

如果是这样,请确保在 VS 的 app.manifest 文件中(在属性下),更改

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

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

即使代码以管理员身份运行,您也必须通过 UAC 警告。

于 2010-10-12T16:35:06.710 回答