C# 在没有UAC提示的情况下从.NET应用程序执行进程
我有一个场景,我需要从我的.NET应用程序启动一个EXE,但我无法绕过弹出的UAC提示符。即使在启动另一个EXE之前,也会触发该提示符-可能是在调用C# 在没有UAC提示的情况下从.NET应用程序执行进程,c#,.net,uac,processstartinfo,C#,.net,Uac,Processstartinfo,我有一个场景,我需要从我的.NET应用程序启动一个EXE,但我无法绕过弹出的UAC提示符。即使在启动另一个EXE之前,也会触发该提示符-可能是在调用Process.Start时触发的 我使用以下代码启动应用程序: var info = new ProcessStartInfo(path, "params"); info.Verb = "runas"; try { Pro
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使用类似安装程序的文件名。以下是以下规则: 在创建32位进程之前, 将检查以下属性 以确定它是否为 安装程序: 文件名包括关键字,如 “安装”、“安装”、“更新”等 以下版本控制中的关键字 资源字段:供应商、公司名称、, 产品名称、文件 说明,原始文件名, 内部名称和导出名称 并列清单中的关键字 嵌入在可执行文件中 特定字符串表中的关键字 在可执行文件中链接的条目 链接的RC数据中的关键属性 在可执行文件中 内存中的目标字节序列 可执行文件
我最初没有动词,在查找修复后将其固定在那里。没有帮助,没有让事情变得更糟。你的第二个exe文件名是什么?有一些规则会触发文件名的UAC,如“setup”、“install”等。我刚刚把它命名为“mytest.exe”,并再次获得了UAC。请确保取出runas,这将触发UACregardless@shsmith抢手货你可能想把这个作为一个答案,这样我就可以接受了。谢谢奇怪的是,我认为清单文件优先于安装启发法。显然它没有-这是我这边的问题