私はILコードをアセンブリにコンパイルしようとしています。 ilasm.exe
は私のC#アプリケーションによって呼び出されるはずです。私はilasm.exe
をProcessStartInfo
インスタンスで呼び出しています。 PEの世代はうまく動作し、私のアセンブリは機能しています。私のIL生成アセンブリ、C#で呼び出されるilasm.exeにUACが必要なのはなぜですか?
私の問題は、自分のアプリケーションで作成されたファイルで、その後に管理者権限を実行する必要があることです。
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.
}
私が間違って何をやっているか?ilasm.exeコマンドを使用し
C#から別のプロセスを呼び出す際に何かを指定する必要はありますか?
私は管理者権限のないアプリケーションとコマンドラインを実行しています。
管理者以外のエラーは何ですか? patchFileとは何ですか?コマンドラインからの呼び出しと同じように呼び出すわけではありません。 –
申し訳ありませんいくつかのことを言いました。 patchFileはこの場合、ilコードを含むファイルへのパスです。私は何の誤りもありません。エラーは、ilasm.exeがc#コードを呼び出し、その後は実行するための管理者権限が必要ですが、cmdを使用してilasm.exeを呼び出す場合は、それらを必要としません。 –
私はあなたが理解していれば、どちらも有効なEXEを生成していると言っていますが、 'Process.Start'から生成されたものはコンピュータを* BOOP *にしてUACプロンプトをポップします。その場合、コードからのものが、「highestAvailable」 'requestedExecutionLevel'を埋め込んでいるように聞こえます[ここ](http://msdn.microsoft.com/en-us/library/bb756929.aspx)。もしそうなら、なぜそれが違うのか分からない。 –