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

syn*_*hko 8 .net c# uac processstartinfo

我有一个场景,我需要从我的.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;
            }
Run Code Online (Sandbox Code Playgroud)

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

    <requestedExecutionLevel level="asInvoker" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)

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

hsm*_*ths 8

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

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

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

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

文件名包括"安装","设置","更新"等关键字.

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

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

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

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

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

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