微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何强制用户在WinForms中的用户pipe理员帐户

我有修改Windowsregistry的简单的WinForms应用程序。 问题是,在Vista / Windows 7我需要强制用户切换到pipe理员。

我不想强制用户以pipe理员身份运行应用程序的开始。 当有必要写入registry时,我希望他这样做。

最好的情况是,当用户需要“切换”到pipe理员时,可以轻松地获得出现在许多设置中的相同消息,因此不必以pipe理员身份从头开始运行。

如何在.Net中实现这一点?

如何检测Windows关机/注销并取消该操作(询问用户后)

如何获取已安装的第三方更新信息

如何在一个应用程序中透明地将多个.Net版本定位到用户

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] 举报,一经查实,本站将立刻删除。

相关推荐