我有修改Windowsregistry的简单的WinForms应用程序。 问题是,在Vista / Windows 7我需要强制用户切换到pipe理员。
我不想强制用户以pipe理员身份运行应用程序的开始。 当有必要写入registry时,我希望他这样做。
最好的情况是,当用户需要“切换”到pipe理员时,可以轻松地获得出现在许多设置中的相同消息,因此不必以pipe理员身份从头开始运行。
如何在.Net中实现这一点?
如何检测Windows关机/注销并取消该操作(询问用户后)
FileLogTraceListener发送System.IO.Exceptions
将Visual Studio 2005 sln迁移到2008,在LIB环境variables中使用vc98path警告,如何解决?
实施Explorer ContextMenu并将多个文件传递给一个程序实例
最佳视觉工作室像Linux开发的工具
什么编程实践影响窗口句柄的数量?
VS2017 8.1SDK与独立安装程序不同吗?
如何find进程所属的产品?
如果应用程序有时并不执行注册表的事情,有时候分区是要走的路。 分区的三个关键是(1)在第二个exe文件上有一个清单,正如Ho所说的那样(2)在按钮/菜单项上放置一个屏蔽层,这样用户就可以期望提升了,(3)用ShellExecute(之前调用Start,将UseShellExecuteFlag设置为true),以便使用清单。
但是,在分解你的应用程序之前,我会问两个问题。 首先,它是用于非管理目的还是每个用户总是“点击该按钮”,并需要提升? 如果是这样,那么只需在应用上放置一个管理员清单,而不要对其进行分区。 其次,你确定需要写入注册表的那一部分吗? 你可以把钥匙移到HKCU的东西上吗? 如果可以的话,那么你不再需要提升,每个人都更快乐。 我总是喜欢先考虑这些可能性,因为它们意味着代码少,测试少于分配。
正如阿诺诺说的那样,我认为一个过程不可能要求提升自己。 一种解决办法就是将流程分成两个应用程序,一个是正常的,一个是大部分工作,另一个只是注册表编写,而这个应用程序有一个包含类似
<requestedExecutionLevel level="requireAdministrator"/>
据我所知,没有API来提升进程。 当进程尝试在提升模式下启动另一个进程时,它会自动发生。
这也是如何与Windows Installer配合使用的。 我不确定是否从字面上开始另一个提升的过程,或者只是创建一个提升的COM对象,但它实际上是一样的事情。
我个人不会诉诸这个骇人的解决办法来提升你的进程中执行; 如果你的过程可能需要提升,那么用清单明确表示,让启动时弹出同意信息。 但是,如果您绝对必须这样做,那么就是这样 – 您需要从您的应用程序中启动一个提升的过程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。