c#从UAC管理级流程以较低的权限启动流程
我的应用程序有一个主要问题。我有一个应用程序和更新程序作为一个单独的exe文件。当更新可用时,更新程序进行更新,并在进程完成时启动我的应用程序。主要问题是-应用程序安装在program files文件夹中,所以更新程序需要UAC管理员权限,这没关系,但当我需要运行我的应用程序时,更新程序需要以普通用户的身份运行,因为如果它以管理员的身份运行,拖放操作不起作用(不是应用程序问题,UAC会阻止它)。我已经尝试了几种不同的解决方案,甚至还有这个:c#从UAC管理级流程以较低的权限启动流程,c#,admin,uac,privileges,C#,Admin,Uac,Privileges,我的应用程序有一个主要问题。我有一个应用程序和更新程序作为一个单独的exe文件。当更新可用时,更新程序进行更新,并在进程完成时启动我的应用程序。主要问题是-应用程序安装在program files文件夹中,所以更新程序需要UAC管理员权限,这没关系,但当我需要运行我的应用程序时,更新程序需要以普通用户的身份运行,因为如果它以管理员的身份运行,拖放操作不起作用(不是应用程序问题,UAC会阻止它)。我已经尝试了几种不同的解决方案,甚至还有这个: 这对我没有帮助-我的应用程序是以管理员身份运行的。你
这对我没有帮助-我的应用程序是以管理员身份运行的。你最好避免从提升的进程启动非提升的进程。这是一个棘手的部分,而且容易出错 这种方法更好:
asInvoker
级别runas
动词以提升的权限重新启动自己,并传递一个命令行参数来指示它。此实例执行更新并返回非常简单和健壮。看看这篇关于如何为提升的流程启用拖放的文章。即使上面说的是MFC应用程序,我想你也可以在任何应用程序中使用这些Windows API
+1;这个答案的第一行相当重要。我读过一些文章说,无论您尝试何种技术,尝试反提升(获取一个反提升的令牌来模拟)都是一个坏主意。我不知道在哪里可以找到这些文章,因为我在Vista刚推出时就读到了。另一个选择是在这个问题上给出的:这样做-就像一个魅力工程!非常感谢我的朋友@不客气。如果对你有帮助,请投票并接受答案。:)@阿列克谢伊万诺夫你能为你的方法提供一个简单的示例代码吗?@drizin是的,你理解正确。非提升更新程序可以在根本不创建窗口的情况下工作。例如,如果提升的更新程序更新成功并返回0退出代码,则非提升的更新程序知道该启动应用程序了。否则,它就会退出。