2010-03-23 95 views
4

我正在使用NSIS來部署.Net應用程序。安裝/卸載過程正常,但我想添加一個最終的ngen步驟來提高啓動性能。從NSIS安裝程序調用ngen

不幸的是,谷歌沒有透露任何相關材料。以前沒有人做過這種事 - 這裏也許有人有一些想法?

在不太可能的情況下,這是不可能的,沒有醜陋的黑客支持,我會願意使用不同的安裝技術提供它可以在我的Linux生成服務器上運行。 (例如,這排除了WiX。)

任何想法?

回答

1

你可以使用內置的Exec的/ ExecWait命令在最後一節執行NGEN(或者,使用nsExec或第三方EXEC插件之一)

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

注:這是假定NGEN是在路徑或當前目錄,它可能不是在大多數系統上,所以要麼使用SetOutPath設置當前目錄,要麼使用ngen的完整路徑

您必須自己計算出您需要的確切開關,請參閱MSDN的2.01.x ngen文檔

+0

」注意:這裏假設ngen位於路徑或當前目錄中,它可能不在大多數系統中,因此要麼使用SetOutPath設置當前目錄,要麼使用ngen的完整路徑「 實際上,我無法找到調用ngen的可靠方法。也許這是信息在註冊表中的某處可用? – BlackStar 2010-03-23 11:27:19

+0

謝謝!你的帖子,以及下面的帖子(在NGen道路上)讓我找到了一個可行的解決方案。 – BlackStar 2010-03-26 18:53:06

+0

@BlackStar:您可以將您的工作解決方案添加到問題的最後?或者,甚至更好,將它添加到http://nsis.sourceforge.net上的wiki並鏈接到您的問題中?你不是唯一一個想從NSIS安裝程序運行ngen的人。:-) – 2010-03-27 00:05:16

3

NGEN將在.NET框架目錄,如:

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

選項1 - GetCORSystemDirectory()是你可以用它來獲得.NET Framework的目錄系統正API調用,但這裏的問題是,它聽起來像從閱讀文檔,它需要從.NET應用程序調用。因此,您可以運行一個小型的.NET應用程序,並將GetCORSystemDirectory()的結果寫入一個ini文件。也許搜索這個功能,看看你是否發現任何有用的谷歌。

選項2 - 您可以在預期路徑中採用.NET框架,並遍歷導演並找到一個以「v2.0」開頭的項目。

選項3 - 簡單地從你的isntaller中提取ngen然後運行它。這是我偶爾會遇到的重大問題。我不確定你可能遇到什麼副作用,這是否完全合法,或者是否有其他文件依賴。如果它和regasm.exe一樣,只要.NET框架已經安裝,你應該沒問題。

+1

謝謝!似乎有一個現成的解決方案來獲得運行時:http://nsis.sourceforge.net/Get_directory_of_installed_.NET_runtime – BlackStar 2010-03-26 18:52:20