簡體   English   中英

為什么我的 IL 生成的程序集 ilasm.exe 由 C# 調用,需要 UAC?

[英]Why does my IL generated Assembly, ilasm.exe called by C#, need UAC?

我正在嘗試將 IL 代碼編譯為程序集。 ilasm.exe應該被我的 C# 應用程序調用。 我通過ProcessStartInfo實例調用ilasm.exe PE 的生成工作正常,我的程序集正在運行。

我的問題是我的應用程序創建的文件之后需要管理員權限才能執行。

如果我從命令行手動調用ilasm.exe ,則不需要管理員權限。

使用 ilasm.exe 命令: ilasm.exe /qui /output="c:\test\newFile.exe" <path to il file>

我的應用程序調用 ilasm.exe:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = ilFilePath + " /qui /output=" + outputPath + "testFile.exe";


try
{
    using (Process exeProcess = Process.Start(startInfo))
    {
        exeProcess.WaitForExit();
    }
}
catch
{
    // Log error.
}

我做錯了什么嗎? 從 C# 調用另一個進程時是否需要指定其他任何內容?

我在沒有管理員權限的情況下運行我的應用程序和命令行。

它需要 UAC,因為您沒有提供output中可寫位置的路徑,因此它試圖寫入ilasm所在的同一文件夾(或您應用程序的當前文件夾)。

非管理員用戶對%WINDIR% (Windows 文件夾)或%ProgramFiles%下的任何內容都沒有寫入權限,因此它要求提升到對該文件夾具有寫入權限的用戶。

什么是補丁文件?

@Chris 的評論與這個謎題相關,我在問題中看不到它。 您可能正在處理 Microsoft 需要使用 UAC 解決的難題。 支持需要 UAC 權限但不要求的舊程序,因為它們是在 Vista 之前編寫的。 像安裝人員。 和補丁程序。

我的水晶球說你的實際程序名稱不像你的問題所說的那樣是 newFile.exe,而是有一個像“update.exe”或“patch.exe”這樣的名稱。 此外,您沒有在生成的程序中包含清單也不是很明顯。 一份清單,表明該程序具有<requestedExecutionLevel>元素的 Vista 感知能力。 此外,同樣不明顯的是,當您從命令行手動運行它時,您為 .exe 使用了另一個名稱。

這是很多猜測,但將它們放在一起是有道理的:Windows 是“啊哈,舊程序。聽起來它想要寫入受限目錄中的 .exe 文件。最好顯示 UAC 提示”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM