2010-03-23 111 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