2

ILファイルであるファイルを取得し、実行時にコンパイルしてexeに戻したいと思います。

現在、process.start を使用してパラメーター (ilasm.exe) を使用してコマンド ラインを起動できますが、作成する C# サービスからこのプロセスを自動化したいと考えています。

リフレクションとreflection.emitでこれを行う方法はありますか?

これが機能している間:

string rawText = File.ReadAllText(string.Format("c:\\temp\\{0}.il", Utility.GetAppSetting("baseName")), Encoding.ASCII);

rawText = rawText.Replace("[--STRIP--]", guid);

File.Delete(string.Format("c:\\temp\\{0}.il", Utility.GetAppSetting("baseName")));

File.WriteAllText(string.Format("c:\\temp\\{0}.il", Utility.GetAppSetting("baseName")),rawText, Encoding.ASCII);

pi = new ProcessStartInfo();
pi.WindowStyle = ProcessWindowStyle.Hidden;
pi.FileName = "\"" + ilasm + "\"";
pi.Arguments = string.Format("c:\\temp\\{0}.il", Utility.GetAppSetting("baseName"));

using(Process p = Process.Start(pi))
{
    p.WaitForExit();
}

これは合理化されたプロセスにしたいので、理想的ではありません。

実行時に IL を作成して保存する例を見てきましたが、既にファイル形式で持っている IL を使用して、exe にコンパイルし直す必要があります。

ありがとう。

4

2 に答える 2

4

「合理化されたプロセス」とはどういう意味ですか? それはあなたにとって十分にうまく機能していませんか?別のプロセスを生成するのは少し汚いと感じることはわかっていますが、それは私が考えることができる最も簡単な方法です。適切な権限があれば、サービスからこれを実行できるはずです。

CSharpCodeProvider のようなものが必要ですが、IL 用です。私はそのようなクラスを知りません、恐れています。

于 2010-05-01T07:07:55.143 に答える
1

実際、preemtiveBitHelmetなどの多くの難読化ツールは、 ilasm.exeとProcessを使用しています。それが最善の戦略だと思います。

于 2010-05-01T15:58:01.090 に答える