4

NSIS を使用して .Net アプリケーションを展開しています。インストール/アンインストール プロセスは正常に機能しますが、起動時のパフォーマンスを向上させるために最後の ngen ステップを追加したいと考えています。

残念ながら、Google は関連する資料を明らかにしませんでした。これまで誰もこれをやったことがないということはありそうにありません。

これが醜いハックなしではサポートできないというまれなケースでは、Linux ビルド サーバーで実行できる別のインストーラー テクノロジを喜んで使用します。(これにより、たとえば WiX が除外されます。)

何か案は?

4

3 に答える 3

3

NGen は、次のような .NET Framework ディレクトリにあります。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

オプション 1 - GetCORSystemDirectory() は、.NET Framework のディレクトリを取得するために使用できるシステム API 呼び出しですが、ここでの問題は、ドキュメントを読むと、.NET アプリケーションから呼び出す必要があるように聞こえることです。したがって、小さな .NET アプリケーションを実行して、GetCORSystemDirectory() の結果を ini ファイルに書き込むことができます。多分その機能を検索して、Google で役立つものがあるかどうかを確認してください。

オプション 2 - 予想されるパスに .NET フレームワークがあると想定し、ディレクトリを反復処理して、"v2.0." で始まるディレクトリを見つけることができます。

オプション 3 - インストール元から ngen を抽出して実行するだけです。これは、私が時々 regasm で行ったことです。これが完全に合法なのか、それとも依存する他のファイルがあるのか​​ 、どのような副作用が発生する可能性があるかはわかりません。regasm.exe のようなものであれば、.NET フレームワークが既にインストールされていれば問題ありません。

于 2010-03-24T20:33:30.257 に答える
1

組み込みの Exec/ExecWait コマンドを使用して、最後のセクションで ngen を実行できます (または、nsExec またはサードパーティの exec プラグインのいずれかを使用します)。

ExecWait '"ngen.exe" install "c:\path\to\your\assembly" /silent'

注: これは、ngen がおそらくほとんどのシステムにないパスまたは現在のディレクトリにあることを前提としているため、SetOutPath で現在のディレクトリを設定するか、ngen へのフル パスを使用します。

必要な正確なスイッチを自分で把握する必要があります。MSDN の2.0および1.x ngen ドキュメントを参照してください。

于 2010-03-23T02:05:29.250 に答える
0

nsis を介してランタイム ディレクトリを取得する方法があるようです: http://nsis.sourceforge.net/Get_directory_of_installed_.NET_runtime

パスがわかったら、あとは正しいパラメーターを指定して ngen を呼び出すだけです。すごい!

于 2010-03-26T18:54:22.833 に答える