我尝试在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。必须有一些编程方式来正确设置我可以添加到控制台应用程序的用户权限 - 任何人都知道如何?
感谢。
答案 0 :(得分:1)
可能您使用“Global\" prefix到应用程序中的对象名称,您的应用程序将在远程桌面会话主机(RD会话主机)服务器会话中启动。如果您的程序必须启用{{3 (SeCreateGlobalPrivilege
)权限。请参阅SE_CREATE_GLOBAL_NAME(但请使用SE_CREATE_GLOBAL_NAME
代替SE_DEBUG_NAME
)或C# – How to enable SeDebugPrivilege?作为示例。
答案 1 :(得分:0)
我认为在2008年的机器上启用了UAC,我无法就你的问题发表评论。
如果是这样,请确保在VS的app.manifest文件中(在属性下),更改
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
到
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
即使代码以管理员身份运行,您也必须通过UAC警告。