어셈블리에 일리노이 코드를 컴파일하려고합니다. ilasm.exe
은 C# 응용 프로그램에서 호출해야합니다. 저는 ilasm.exe
을 ProcessStartInfo
인스턴스를 통해 불러냅니다. PE의 생성은 잘 작동하고 어셈블리는 작동합니다.IL에서 생성 된 IL 생성 Assembly, ilasm.exe에 C#이 필요하며 UAC가 필요합니까?
내 문제는 내 응용 프로그램에서 만든 파일로 나중에 관리자 권한을 실행해야한다는 것입니다.
명령 줄에서 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.
}
내가 잘못 아무것도 건가요 다음 Ilasm.exe를 호출 ilasm.exe /qui /output="c:\test\newFile.exe" <path to il file>
내 응용 프로그램 :
는 Ilasm.exe를 명령을 사용? C#에서 다른 프로세스를 호출 할 때 다른 것을 지정해야합니까?
관리자 권한없이 내 응용 프로그램과 명령 줄을 실행하고 있습니다.
비 관리자로받은 오류는 무엇입니까? patchFile이란 무엇입니까? 명령 행에서 호출 한 것과 똑같이 호출하지는 않습니다. –
죄송합니다. 몇 가지 사항은 언급하지 않았습니다. patchFile은이 경우 il 코드가 들어있는 파일의 경로입니다. 나는 어떤 오류도 내지 않고있다. 오류는 ilasm.exe가 C# 코드를 통해 호출하고 이후에는 실행 권한이 필요하며 cmd를 통해 ilasm.exe 호출은 필요하지 않습니다. –
당신이 이해한다면, 당신은 양쪽 모두가 유효한 EXE를 생성한다고 말하고 있지만,'Process.Start'에서 생성 된 것이 당신의 컴퓨터를 * BOOP *로 만들고 UAC 프롬프트를 띄웁니다.그렇다면 코드에서 나온 것이 highestAvailable'requestedExecutionLevel'을 임베딩 한 것처럼 들리네요. [here] (http://msdn.microsoft.com/en-us/library/bb756929.aspx). 그렇다면 왜 다른가라는 단서가 없습니다. –