我正在使用Inno Setup为我的应用程序生成安装程序,我想在安装期间为NGen my应用程序编写一个脚本。我希望代码能够以NGen文件为目标,目标是x86、x64或AnyCPU。我希望能够在NGen on 32bit和64bit系统。我怎样才能做到这一点?
我找到了几个有用的链接:
Getting the .NET Framework directory path
http://nsis.sourceforge.net/Get_directory_of_installed_.NET_runtime
我发现这是一个相当复杂的问题--最多可以有4个不同版本的NGen应用程序:
用于CLR2.0的
G 225
更复杂的是,应用程序可以针对32位CPU并在64位系统上运行。
所以我脑海中浮现的是这样一个功能:
function NGenFile(file: String; targetCPU: TTargetCPU; targetCLR: TTargetCLR): Boolean;在成功的“理货”之后,把它称为[Code]的某个地方:
NGenFile(ExpandConstant('{app}\application.exe'), tcpu64, tclr20);
NGenFile(ExpandConstant('{app}\library1.dll'), tcpu64, tclr40);
NGenFile(ExpandConstant('{app}\library2.dll'), tcpu32, tclr20);
NGenFile(ExpandConstant('{app}\library3.dll'), tcpu32, tclr40);
NGenFile(ExpandConstant('{app}\library4.dll'), tcpuAny, tclr20);
NGenFile(ExpandConstant('{app}\library5.dll'), tcpuAny, tclr40);它的作用是这样的:
在64位系统上,它将生成针对64位CPU和CLR2.0的本地映像,结果为:= True
在32位系统上,它什么也不做,结果False
在64位系统上,它将生成针对64位CPU和CLR4.0的本地映像,结果为:= True
在32位系统上,它什么也不做,结果False
在64位系统上,它将生成针对32位CPU和CLR2.0的本地映像,结果为:= True
在32位系统上,它将执行与64位system
在64位系统上,它将生成针对32位CPU和CLR4.0的本地映像,结果为:= True
在32位系统上,它将执行与64位system
在64位系统上,它将生成针对64位CPU和CLR2.0的本地映像,结果为:= True
在32位系统上,它将生成针对32位CPU和CLR2.0的本地映像,结果True
在64位系统上,它将生成针对64位CPU和CLR4.0的本地映像,结果为:= True
在32位系统上,它将生成针对32位CPU和CLR4.0的本地映像,结果为:= True
因此,要使它工作,我需要知道4种不同的路径到.NET运行时目录。这就是我发现的:
获取"InstallRoot“在"HKLM\Software\Microsoft.NETFramework”中的值,保存到value1
获取"HKLM\Software\Microsoft.NETFramework\Policy\v2.0",中第一个值的名称,保存到value2
value1 +“v2.0”+ value2 + "\ngen.exe“=>获胜
示例:"c:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe“
我想这在32位和64位systems
获取"InstallRoot“在"HKLM\Software\Microsoft.NETFramework”中的值,保存到value1
获取"HKLM\Software\Microsoft.NETFramework\Policy\v4.0",中第一个值的名称,保存到value2
value1 +“v4.0”+ value2 + "\ngen.exe“=>获胜
示例:"c:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe“
我想这在32位和64位systems
如何为64位InstallRoot框架获取.NET?
示例:"c:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe"
如何为64位InstallRoot框架获取.NET?
示例:"c:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe"
实际上,我不确定64位系统上的" InstallRoot“值是否指向32位.NET的InstallRoot或64位.NET,那么前2种方法对任何系统都是可靠的吗?第二个方法看起来怎么样?有什么更简单的方法来实现这一切吗?
发布于 2010-12-31 14:06:20
您使用的是什么版本的InnoSetup?在我使用的版本(5.4.0a)中,已经存在用于查找.NET根目录的常量。来自InnoSetup帮助:
{dotnet20} .NET Framework2.0版本根目录。{dotnet20}等于{dotnet2032},除非安装以64位模式运行,在这种情况下,它等同于{dotnet2064}。
如果试图在没有.NET框架2.0版本的系统上扩展此常量,则会引发异常。
{dotnet2032} 32位.NET框架版本2.0根目录.
如果试图在没有.NET框架2.0版本的系统上扩展此常量,则会引发异常。
{dotnet2064} 64位Windows :64位.NET框架版本2.0根目录.
如果试图在没有.NET框架2.0版本的系统上扩展此常量,则会引发异常。
{dotnet40} .NET框架版本4.0根目录。{dotnet40}等于{dotnet4032},除非安装以64位模式运行,在这种情况下,它等同于{dotnet4064}。
如果试图在没有.NET Framework4.0版本的系统上扩展此常量,则会引发异常。
{dotnet4032} 32位.NET框架版本4.0根目录.
如果试图在没有.NET Framework4.0版本的系统上扩展此常量,则会引发异常。
{dotnet4064} 64位Windows :64位.NET框架版本4.0根目录.
如果试图在没有.NET Framework4.0版本的系统上扩展此常量,则会引发异常。
https://stackoverflow.com/questions/4558734
复制相似问题