我有一个场景,我需要从我的.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)都在其清单中定义了这个:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
如何在不触发UAC提示的情况下执行其他EXE,并使其具有与调用应用程序相同的访问令牌(因此它可以更改app文件夹中的文件等)?
答案 0 :(得分:7)
在启动第二个EXE时阻止UAC提示:
1)不要使用Verb = "runas"
- 每次都会给你UAC
2)不要为EXE使用类似于设置的文件名。以下是MSDN的规则:
在创建32位进程之前, 检查以下属性 确定它是否是一个 安装程序:
文件名包含关键字 “安装”,“设置”,“更新”等。
以下版本控制中的关键字 资源字段:供应商,公司名称, 产品名称,文件
描述,原始文件名, 内部名称和导出名称。
并排清单中的关键字 嵌入在可执行文件中。
特定StringTable中的关键字 可执行文件中链接的条目。
链接的RC数据中的关键属性 在可执行文件中。
目标内的字节序列 可执行文件。