C# 非托管代码是否需要清单文件?

C# 非托管代码是否需要清单文件?,c#,c++,security,manifest,uac,C#,C++,Security,Manifest,Uac,在我开始之前,请允许我为我几乎不存在的UAC编程知识道歉。也就是说 我有一个c#应用程序,它启动一个完全不同的程序的setup.exe。它的主要目的是帮助第二个程序在UAC下运行。简而言之,它在提升的命令提示符下运行setup.exe文件。我无法控制第二个程序,所以让它与UAC兼容不是一个选项。当Vista第一次发布时,我写了我的程序,几乎找不到UAC的信息。现在请记住,以这种方式运行setup.exe文件实际上是可行的,并且允许程序在UAC打开的情况下运行。但我的部分程序还添加了一个“thei

在我开始之前,请允许我为我几乎不存在的UAC编程知识道歉。也就是说

我有一个c#应用程序,它启动一个完全不同的程序的setup.exe。它的主要目的是帮助第二个程序在UAC下运行。简而言之,它在提升的命令提示符下运行setup.exe文件。我无法控制第二个程序,所以让它与UAC兼容不是一个选项。当Vista第一次发布时,我写了我的程序,几乎找不到UAC的信息。现在请记住,以这种方式运行setup.exe文件实际上是可行的,并且允许程序在UAC打开的情况下运行。但我的部分程序还添加了一个“theirapp.exe.manifest”文件,其中“requireAdministrator”作为执行级别。所以我的问题是,当我最终尝试运行的程序是非托管应用程序(CBuilder C++)时,我是否需要该文件。在路上的某个地方,我认为需要一个清单文件。但现在我听说它们只适用于.NET应用程序

谢谢

编辑:总结一下。。。在UAC下运行非托管程序是否需要清单文件

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel
        level="requireAdministrator"
        uiAccess="false"/>
    </requestedPrivileges>
  </security>
</trustInfo>

在VisualC++中,您将在清单选项(链接器设置的一部分)下找到选项:


这回答了我的问题。我想,它引用了一个未管理DLL的清单文件这一事实使我无法进行搜索

清单文件不仅适用于托管(.NET)应用程序。这两个概念彼此无关。我想要在UAC下运行的程序不是我的,我无法控制它。它也用CBuilder编写,而不是VisualC++。您仍然可以使用位于可执行文件旁边的清单文件(不确定CBuilder是否能够正确嵌入它)。作为一种替代方法,您可以创建请求提升权限的子进程(就像许多安装引导一样)。编辑:只是澄清一下:你自己的包装器/加载器是用CBuilder编写的,要启动的程序本质上是专有的/封闭的源码?不,我的包装是C语言,我想在UAC下运行的应用程序是C++,我不能改变它。我在上面添加了main方法。我只是在该过程完成后添加清单文件。我只是不确定它是否需要在那里。当我测试时,有时我发现它是需要的,有时它不是。
private void RunElevated()
{
    ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", @"/C " + AppDomain.CurrentDomain.BaseDirectory + @"setup.exe");
    processInfo.Verb = "runas";

    try
    {
        Process.Start(processInfo);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message.ToString());
    }
}