在没有UAC提示的情况下从.NET应用程序执行进程

我有一个场景,我需要从我的.NET应用程序启动一个EXE,但我无法绕过弹出的UAC提示。 甚至在启动其他EXE之前就会触发提示 – 可能是在调用Process.Start

我使用此代码启动应用程序:

  var info = new ProcessStartInfo(path, "params"); info.Verb = "runas"; try { Process.Start(info); } catch (System.ComponentModel.Win32Exception) { // Person denied UAC escallation return false; } 

两个EXE(我的应用程序和其他EXE)都在其清单中定义了:

   

如何在不触发UAC提示的情况下执行其他EXE,并使其具有与调用应用程序相同的访问令牌(因此它可以更改app文件夹中的文件等)?

要在启动第二个EXE时阻止UAC提示:

1)不要使用Verb = "runas" – 每次都会给你UAC

2)不要为EXE使用类似于设置的文件名。 以下是MSDN的规则:

在创建32位进程之前,将检查以下属性以确定它是否为安装程序:

文件名包括“安装”,“设置”,“更新”等关键字。

以下版本控制资源字段中的关键字:供应商,公司名称,产品名称,文件

描述,原始文件名,内部名称和导出名称。

嵌入在可执行文件中的并排清单中的关键字。

可执行文件中链接的特定StringTable条目中的关键字。

可执行文件中链接的RC数据中的关键属性。

可执行文件中的目标字节序列。