.net 和管理员权限 - 如何针对 2 个不同的场景嵌入清单文件
我有一个 .net 应用程序,它将安装在“程序文件”下,以两种不同的模式运行:
- “ADVANCED_MODE”以及所有插件 启用后会弹出 UAC 以管理员身份运行
- “BASIC_MODE”,仅使用很少的插件 已加载,应该可以正常工作 用户
该如何解决这个问题?
如果我嵌入清单文件(requireAdmin
设置为开),它将不适用于 BASIC_MODE。如果我不使用任何清单,那么我就没有机会在 ADVANCED_MODE 下弹出 UAC。如果我使用“asInvoker
”或“highestAvailable
”,当我以普通用户帐户从程序文件运行该应用程序时,我会得到奇怪的效果:它在启动后立即关闭,没有任何崩溃。
你会怎么办?我有什么选择?
I have one .net application which would be installed under "program files" running in 2 different modes:
- "ADVANCED_MODE" with all plugins
enabled which should pop-up the UAC
to run as administrator - "BASIC_MODE" with only few plugins
loaded which should work as normal
user
What to do to solve this case?
If I embed a manifest file (requireAdmin
set on), it will not work for BASIC_MODE. If I don't use any manifests, then I don't have the chance to popup the UAC in ADVANCED_MODE. If I use "asInvoker
" or "highestAvailable
" I get strange effects when I run the app from Program Files as normal user account: it closes immediately after startup without any crash.
What would you do? What are my options?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在清单中使用 asInvoker,当您的应用程序以 ADVANCED_MODE 启动时(并且您还不是管理员),使用 ShellExecute 和“runas”动词启动应用程序的新实例。
这些“奇怪的效果”表明您的应用程序无法真正以非管理员身份运行(如果没有清单,您的应用程序将使用一些兼容性填充程序(如文件和注册表重定向)运行)您可以使用 Microsoft 应用程序兼容性工具包,LUA Buglight 和进程监视器,用于查找标准用户错误...
Use asInvoker in your manifest and when your app is started in ADVANCED_MODE (and you are not already admin), start a new instance of your app with ShellExecute and the "runas" verb.
These "strange effects" indicate that your app can't really run as non-admin (Without a manifest your app will run with some compatibility shims like file & registry redirection) You can use the Microsoft Application Compatibility Toolkit, LUA Buglight and Process Monitor to look for standard user bugs...