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

时间:2011-05-28 22:41:02

标签: c# .net 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;
            }

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

    <requestedExecutionLevel level="asInvoker" uiAccess="false" />

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

1 个答案:

答案 0 :(得分:7)

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

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

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

  

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

     

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

     

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

     

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

     

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

     

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

     

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

     

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