8

我有一个场景,我需要从我的 .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,并使其具有与调用应用程序相同的访问令牌(因此它可以更改应用程序文件夹等中的文件)?

4

1 回答 1

8

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

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

2) 不要为您的 EXE 使用类似设置的文件名。这是来自MSDN的规则:

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

文件名包括“安装”、“设置”、“更新”等关键字。

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

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

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

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

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

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

于 2011-05-29T01:23:56.673 回答