在没有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,并使其具有与调用应用程序相同的访问令牌(这样它就可以更改应用程序文件夹中的文件等)?

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

在启动第二个EXE时防止出现UAC提示:

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

2) 不要为EXE使用类似安装程序的文件名。以下是MSDN的规则:

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

文件名包括以下关键字"安装"、"设置"、"更新"等

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

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

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

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

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

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