Vista:从服务创建流程而不会弹出任何对话框

时间:2010-02-17 10:46:38

标签: windows-vista visual-c++

我是vista的新手,而不是高级程序员。从过去几天开始,我正在尝试消化有关vista的许多技术细节。但我仍然没有什么基本问题。希望大家都能帮助我解答我的问题。

我们可以在本地系统帐户下运行的服务中创建一个交互式进程(具有带“invokeAsAdministrator”的嵌入式清单文件)吗?

在这里,我知道会话0隔离和所有。我问这个问题,因为,当我通过CreateProcessAsUser(需要管理员权限)创建一个交互式进程时,它失败了,错误740.使用这个我给了正确的会话ID。会话ID是我的活动桌面,我的用户以管理员身份登录。

如果可以创建进程,那么会显示UAC对话框吗?

如果出现UAC对话框,我们可以避免这种情况吗?

2 个答案:

答案 0 :(得分:1)

这是很容易理解的问题。本地帐户没有管理员的优势。你唯一能做的就是模仿。临时你模仿另一个帐户(在你的情况下,它是管理员)。您可以在MSDN中找到主题WindowsIdentity.Impersonate(http://msdn.microsoft.com/en-us/library/chf6fbt4.aspx

的此技术示例

修改

抱歉,只有在帖子发现你使用了vc ++之后, 在Win API上使用ImpersonateLoggedOnUser

答案 1 :(得分:0)

createprocessasuser在我的情况下失败,因为默认情况下,当我们查询用户桌面会话的用户令牌时,我获得了为用户创建的受限令牌(对于管理员,两个令牌被创建1)受限令牌2)完全令牌;我的应用程序只能由管理员运行。)

通过浏览网络,我发现我必须找到链接令牌,并使用该令牌创建流程。

从服务创建流程的代码可以在以下问题中找到: Desktop problem with using CreateProcessAsUser from a service on Vista