2

进程是否可以将自身从提升的 UAC 权限降低回标准用户?如果不能,提升的进程可以使用标准用户令牌启动其副本然后杀死自己吗?任何代码示例(C# 首选)?

细节:

问题: - 用户安装我的产品(用 C# 编写) - 安装程序将其 UAC 权限提升到管理员 - 最后安装程序启动我的 exe - exe 从管理员继承提升的权限 - exe 安装在 Windows 资源管理器中变得不可见的网络驱动器(以常规权限运行)

我考虑的选项:1)将安装程序分成外部exe和内部exe,以提升的权限运行。该安装包含 1000 多行 NSIS 代码,我对 NSIS 2) 安装具有较低权限的驱动器一无所知。如果我这样做,Win Explorer 可以看到驱动器,但我的 exe 看不到 3) 将 EnableLinkedConnection 注册表选项设置为 1。这是不行的,因为它需要在安装过程中重新启动 PC。

请帮忙!

谢尔盖

4

3 回答 3

3

一种方式: http: //www.codeproject.com/KB/vista-security/VistaElevator.aspx

另一种方式(在上一篇文章的最新评论中提到):http ://brandonlive.com/2008/04/27/getting-the-shell-to-run-an-application-for-you-part-2-how /

于 2010-03-30T18:48:25.033 回答
1

It is impossible to get this working in all configurations, there are ugly hacks like Kyle links to, but in the end, there is no real way to lower your rights. Since you mention NSIS, it so happens that it does have a plugin called UAC that does the inner/outer instance dance, it's not pretty but it does work.

于 2010-04-03T22:26:26.963 回答
1

如果您对“hack”答案感到满意,另一篇关于 NSIS 的博客文章显示了一种更简单的方法。只是explorer.exe用来启动另一个进程似乎有效。*

C# 只是

Process.Start("explorer.exe", YourProgram.ExecutablePath)

请注意,即使您使用WaitForExit()资源管理器,您的程序也可能尚未完成!

*还要注意其中一条评论:“不幸的是,Windows Shell 团队已回复说“Explorer.exe AppName.exe”的当前行为是一个错误,可能无法在未来的 Windows 更新/版本中工作。应用程序不应依赖它。”

于 2014-09-10T08:29:56.133 回答