2012-04-11 36 views
1

在我開始之前,讓我對我幾乎不存在的編程UAC知識表示歉意。這說...非託管代碼需要清單文件嗎?

我有一個C#應用程序,啓動setup.exe完全不同的程序。其主要目的是幫助第二個項目在UAC下運行。所以簡而言之,它在提升的命令提示符下運行該程序的setup.exe文件。我無法控制第二個程序,因此將它與UAC兼容不是一種選擇。當Vista首次發佈時,我寫了我的程序,並且找不到UAC信息。現在請記住,以這種方式運行setup.exe文件實際上可行,並且允許程序在UAC上運行。但是我的程序的一部分還添加了一個「theirapp.exe.manifest」文件,其中帶有「requireAdministrator」作爲執行級別。所以我的問題是,我最終試圖運行的程序是否爲非託管應用程序(CBuilder C++)時甚至需要該文件。我一直在相信一個清單文件是需要的。但現在我被告知他們只爲.NET應用程序工作。

感謝

編輯:概括起來......是運行在UAC下一個非託管程序所需的manifest文件?

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

編輯:我對正在運行的其他程序的setup.exe

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()); 
    } 
} 
+1

清單文件* *不適用於託管(.NET)應用程序。這兩個概念與彼此無關。 – 2012-04-11 16:32:53

回答

0

這個link回答我的問題。我想,它引用一個未受管理的DLL的清單文件會拋棄我的搜索。

3

在Visual C++中,你會發現下的清單選項(部分的鏈接器設置)選項主要方法:

UAC settings in Visual Studio 11 (beta)

+0

我想要在UAC下運行的程序不是我的,我無法控制它。它也用CBuilder編寫而不是Visual C++。 – JimDel 2012-04-11 16:57:13

+0

您應該仍然可以使用位於可執行文件旁邊的清單文件(不確定CBuilder是否能夠正確嵌入它)。作爲替代方法,您可以創建請求提升特權的子進程(如許多安裝引導程序所做的那樣)。編輯:只是爲了澄清:你自己的包裝/裝載機是使用CBuilder編寫的,而要啓動的程序本質上是專有/封閉源代碼? – Mario 2012-04-11 17:09:11

+0

不,我的包裝是C#和我想在UAC下運行的應用程序是C++,我不能改變它。我在上面添加了主要方法。在完成該過程後,我只需添加清單文件。我只是不確定它是否需要在那裏。當我測試時,有時我會發現它的需要,有時它不是。 – JimDel 2012-04-11 17:22:38