在没有UAC提示的情况下从.NET应用程序执行进程
本文关键字:NET 应用程序 执行 进程 情况下 UAC 提示 | 更新日期: 2023-09-27 17:57:57
我有一个场景,需要从.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,并使其具有与调用应用程序相同的访问令牌(这样它就可以更改应用程序文件夹中的文件等)?
在启动第二个EXE时防止出现UAC提示:
1) 不要使用Verb = "runas"
——每次都会给你UAC
2) 不要为EXE使用类似安装程序的文件名。以下是MSDN的规则:
在创建32位处理之前,将检查以下属性以确定它是否是安装程序:
文件名包括以下关键字"安装"、"设置"、"更新"等
以下版本控制中的关键字资源字段:供应商、公司名称、,产品名称,文件
描述,原始文件名,内部名称和导出名称。
并列清单中的关键字嵌入到可执行文件中。
特定StringTable中的关键字可执行文件中链接的条目。
RC数据链接中的关键属性在可执行文件中。
中的目标字节序列可执行文件。