由于windows7集成的是.Net Framework3.5SP1,还没有集成.Net Framework4,所以我在给别人做东西的时候还是更倾向于基于3.5 SP1。而又要考虑到目前还仍有不少的XP用户,所以即使是采用3.5 SP1,也需要考虑客户机上是不是安装了.Net Framework。
所以在制作安装包的时候,需要将.Net的安装包也集成进去。而Visual Studio2010默认只包含了.Net 4的安装包,所以在生成集成有3.5SP1的安装包时,遇到了一些麻烦。
首先,想要制作一个带有.Net Framework的安装包,需要如下:
新建一个安装项目
查看项目属性,点击“系统必备”按钮
在弹出的系统必备对话框中,选中“创建用于安装系统必备组件的安装程序”
在下方的安装位置处,选择“与从我的应用程序相同的位置下载系统必备组件”,则为将必备组件的安装程序集成到安装包中,选择“从组件供应商的网站上下载系统必备组件”,则为不集成到安装包里,而是引导用户在微软网站下载。所以在此选择“与从我的应用程序相同的位置下载系统必备组件”
若需要.Net Framework3.5SP1,则在必备组件中选择.NET Framework 3.5 SP1,取消选择Microsoft .Net Framework 4(x86和x64)即可。
若生成项目,可以发现出现一大堆找不到文件的错误。解决的主要思想是:自己将.Net Framework 3.5 SP1的安装文件和简体中文语言包的x86和x64版安装文件拷贝到如下文件夹内:
1
| C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages
|
可以看到,默认Packages文件夹下已有DotNetFX35SP1子文件夹,不过其内只有以下几个配置文件:
1 2 3 4 5 6 7 8 9
| C:\>tree "C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\dotNetFX35SP1" /f 卷 WIN7 的文件夹 PATH 列表 卷序列号为 00000031 BA5C:BB7D C:\PROGRAM FILES\MICROSOFT SDKS\WINDOWS\V7.0A\BOOTSTRAPPER\PACKAGES\DOTNETFX35SP1 │ product.xml │ └─zh-Hans eula.rtf package.xml
|
我们需要下载dotnetfx35.exe(http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=d0e5dea7-ac26-4ad7-b68c-fe5076bba986&DisplayLang=zh-cn)后解压,将解压所得的wcu\dotNetFramework\下的所有文件及目录都拷贝到Packages\DotNetFX35SP1\目录下。
- 这时如果马上进行生成安装包的尝试,会发现还剩两个错误:简体中文语言包的x86和x64版两个安装文件没有找到:
1 2
| 系统必备组件的安装位置未设置为“组件供应商的网站”,并且无法在磁盘上找到项“.NET Framework 3.5 SP1”中的文件“DotNetFX35SP1\DotNetFX35\x64\dotnetfx35langpack_x64zh-CHS.exe”。有关详细信息,请参见帮助。 系统必备组件的安装位置未设置为“组件供应商的网站”,并且无法在磁盘上找到项“.NET Framework 3.5 SP1”中的文件“DotNetFX35SP1\DotNetFX35\x86\dotnetfx35langpack_x86zh-CHS.exe”。有关详细信息,请参见帮助。
|
首先下载dotnetfx35langpack_x64zh-CHS.exe和dotnetfx35langpack_x86zh-CHS.exe。
注意!虽然提示的错误是找不到DotNetFX35SP1\dotNetFX35\x64\dotnetfx35langpack_x64zh-CHS.exe和DotNetFX35SP1\dotNetFX35\x86\dotnetfx35langpack_x86zh-CHS.exe,但将文件拷贝到这里,你会发现照样是找不到文件的错误!
应该将两个文件分别拷贝到Packages\DotNetFX35SP1\zh-Hans\DotNetFX35\x64和Packages\DotNetFX35SP1\zh-Hans\DotNetFX35\x86下,复制过去之后再生成,成功
原因:微软把语言包独立出来了,如果你查看Packages\DotNetFX35SP1\product.xml,你会发现里面没有DotNetFX35\x86\dotnetfx35langpack_x86zh-CHS.exe这个PackageFile,而在Packages\DotNetFX35SP1\zh-Hans\product.xml里,你可以发现有两个PackageFile是我们需要的。所以,错误信息里提示的缺少文件,其实是PackageFile的Name值,而不是在磁盘上的存储路径。
所以,根本不需要修改product.xml!
最终的目录结构应该如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
| C:\>tree "C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\dotNetFX35SP1" /f 卷 WIN7 的文件夹 PATH 列表 卷序列号为 00000031 BA5C:BB7D C:\PROGRAM FILES\MICROSOFT SDKS\WINDOWS\V7.0A\BOOTSTRAPPER\PACKAGES\DOTNETFX35SP1 │ dotNetFx35setup.exe │ product.xml │ ├─dotNetFX20 │ ASPNET.msp │ ASPNET_64.msp │ clr.msp │ clr_64.msp │ crt.msp │ crt_64.msp │ dw.msp │ dw_64.msp │ Netfx20a_x64.msi │ Netfx20a_x86.msi │ NetFX_CA.msp │ NetFX_Core.msp │ NetFX_Core_64.msp │ NetFX_Other.msp │ NetFX_Other_64.msp │ prexp.msp │ winforms.msp │ winforms_64.msp │ ├─dotNetFX30 │ │ Netfx30a_x64.msi │ │ Netfx30a_x86.msi │ │ RGB9RAST_x64.msi │ │ RGB9RAST_x86.msi │ │ WCF.msp │ │ WCF_64.msp │ │ WCS.msp │ │ WCS_64.msp │ │ WF.msp │ │ WF_32.msp │ │ WF_64.msp │ │ WIC_x64_enu.exe │ │ WIC_x86_enu.exe │ │ WPF1.msp │ │ WPF1_64.msp │ │ WPF2.msp │ │ WPF2_32.msp │ │ WPF2_64.msp │ │ WPF_Other.msp │ │ WPF_Other_32.msp │ │ WPF_Other_64.msp │ │ XPS.msp │ │ XPSEPSC-amd64-en-US.exe │ │ XPSEPSC-x86-en-US.exe │ │ │ ├─x64 │ │ msxml6.msi │ │ │ └─x86 │ msxml6.msi │ ├─dotNetFX35 │ ├─ia64 │ │ netfx35_ia64.exe │ │ │ ├─x64 │ │ netfx35_x64.exe │ │ │ └─x86 │ netfx35_x86.exe │ ├─dotNetMSP │ │ NetFx_20_SP1_ENU_License.rtf │ │ NetFx_30_SP1_ENU_License.rtf │ │ │ ├─ia64 │ │ NetFX2.0-KB948609-v6001-ia64.msu │ │ NetFX3.0-KB948610-v6001-ia64.msu │ │ │ ├─x64 │ │ NetFX2.0-KB936704-v6000-x64_RTM_en.msu │ │ NetFX2.0-KB948609-v6001-x64.msu │ │ NetFX3.0-KB936705-v6000-x64_RTM_en.msu │ │ NetFX3.0-KB948610-v6001-x64.msu │ │ │ └─x86 │ NetFX2.0-KB936704-v6000-x86_RTM_en.msu │ NetFX2.0-KB948609-v6001-x86.msu │ NetFX3.0-KB936705-v6000-x86_RTM_en.msu │ NetFX3.0-KB948610-v6001-x86.msu │ ├─Tools │ clwireg.exe │ clwireg_ia64.exe │ clwireg_x64.exe │ └─zh-Hans │ eula.rtf │ package.xml │ └─DotNetFX35 ├─x64 │ dotnetfx35langpack_x64zh-CHS.exe │ └─x86 dotnetfx35langpack_x86zh-CHS.exe
|