C# 当基本应用程序处于管理模式时,以正常模式运行子应用程序

C# 当基本应用程序处于管理模式时,以正常模式运行子应用程序,c#,C#,我有两个应用程序,一个是主应用程序,一个是子应用程序。两个应用程序都可以单独打开,主应用程序也可以打开子应用程序。由于主应用程序处于管理模式,因此从主应用程序打开子应用程序时,也会以相同模式打开。是否有任何可能的方法,我可以在正常情况下打开子应用程序,但我需要让基础应用程序在管理模式下运行。问题是我需要在子应用程序中拖放文件,而当应用程序处于管理员模式时,这是无法完成的。获得管理权限非常困难。摆脱它们几乎是不可能的,就像从一个提升的过程开始一个非提升的过程一样。这是Windows令人烦恼的特性

我有两个应用程序,一个是主应用程序,一个是子应用程序。两个应用程序都可以单独打开,主应用程序也可以打开子应用程序。由于主应用程序处于管理模式,因此从主应用程序打开子应用程序时,也会以相同模式打开。是否有任何可能的方法,我可以在正常情况下打开子应用程序,但我需要让基础应用程序在管理模式下运行。问题是我需要在子应用程序中拖放文件,而当应用程序处于管理员模式时,这是无法完成的。

获得管理权限非常困难。摆脱它们几乎是不可能的,就像从一个提升的过程开始一个非提升的过程一样。这是Windows令人烦恼的特性

有一些方法,但它们通常涉及非托管代码(Windows API),并且不太稳定

如果您让应用程序用户/系统管理员指定一个他明确维护为无管理权限的特定的Windows用户,则可能会出现这种情况。大多数非提升服务的启动方式是由在服务管理器中设置的显式Windows用户启动

大多数程序员最终决定完全通过以下方法来回避此问题:

  • 将流程A和流程B设计为始终以非提升方式启动(无清单或任何要求提升的内容)
  • 修改进程A以检测它现在是否未提升
  • 让进程A尝试通过具有适当选项的Runas启动自身的提升副本
  • 如果用户总是被提升(因为UAC被关闭或类似的事情),它就不在你的掌控之中
  • 正如我通过艰苦的学习所了解到的那样,也有可能因为以下原因导致提升失败。再说一次,这不是你能控制的

当然,有一个大问题,为什么这是一个问题开始,如果这可能是一个XY问题。拖放可能有这些限制。但是你必须用D&D来做这个吗?有很多方法可以进行。他们中的大多数人没有受到这样的限制。D&D只是其中之一。

陈雷蒙(Raymond Chen)在《我可能会考虑使用不同的应用程序域为子应用程序生成一个单独的流程》上写了一篇很好的帖子。若你们愿意的话,我可以详细解释一下,这是一个很明显的例子。您应该关注实际问题,即在以提升权限运行时无法拖放文件。@DotNetHitMan-不确定您将提供什么,但由于应用程序域包含在进程中,您的评论没有多大意义。@Flater-众所周知,拖放操作与UIPI存在问题,因为它是使用窗口消息完成的,UIPI的全部目的是防止低权限应用程序向高权限应用程序发送消息。