1. 为什么需要专业安装包制作工具第一次给客户交付软件时我直接把Debug文件夹压缩发过去结果对方电脑上根本运行不了。这才明白专业安装包的重要性——它不仅仅是把文件打个包那么简单。VS2013自带的InstallShield Limited Edition免费版就能解决这个问题而且比第三方工具更贴合开发环境。安装包的核心价值在于解决三个问题环境依赖比如.NET框架、文件部署自动放到正确位置、系统集成注册表、快捷方式等。我见过太多开发者在这上面栽跟头比如忘记打包关键DLL或者没考虑32/64位系统差异。使用InstallShield可以系统化解决这些问题。2. 环境准备与InstallShield安装2.1 获取InstallShield Limited Edition虽然VS2013安装时默认不带InstallShield但微软提供了免费版本。打开VS2013新建项目窗口在其他项目类型→安装和部署下会看到灰色的InstallShield图标点击它会跳转到注册页面。这里有个坑国家选择框默认没有中国选项。解决方法是在Country输入框右键选择检查在HTML代码里手动添加option valueChinaChina/option填完基本信息后即使页面报错也不用管注册码会发到邮箱。我实测从注册到收到邮件大概需要90秒。2.2 安装注意事项下载的InstallShield2015LE.exe注意版本号比VS2013高这是正常的安装时建议关闭VS2013。安装完成后需要重启VS这时新建项目里就能看到可用的InstallShield项目模板了。有个细节要注意如果解决方案里已经有其他项目记得右键解决方案→添加→新建项目而不是直接新建解决方案。3. 创建第一个安装项目3.1 基础配置要点新建InstallShield项目后首先在Application Information里设置软件名称会显示在安装界面版本号每次更新必须修改公司名称影响默认安装路径默认安装目录建议用[ProgramFilesFolder]变量这里最容易出错的是字符集设置一定要在General Information→Summary里把语言改为简体中文否则安装路径包含中文时会乱码。我有个项目就因为这个导致配置文件读取失败。3.2 文件部署实战在Application Files里添加要打包的文件时有几种典型场景主程序输出右键Project Assistant→Application Files添加Primary Output会自动包含exe和依赖的DLL配置文件单独添加app.config或web.config资源文件建议先在左侧创建虚拟文件夹如图片放Images文件夹对于需要注册的COM组件一定要在文件属性里勾选Self-registration。曾经有个项目因为漏掉这个设置导致ActiveX控件无法使用。4. 高级功能配置4.1 依赖项管理在Installation Requirements里可以设置系统要求最常用的是.NET Framework版本。建议勾选Launch Conditions里的版本检查这样安装时会自动检测。打包.NET Framework有技巧在Redistributables里勾选对应版本后InstallShield会下载离线包。如果网速慢可以手动下载dotNetFx45_Full_x86_x64.exe放到指定目录C:\Program Files (x86)\InstallShield\2015LE\SetupPrerequisites\Microsoft.net\4.5\Full4.2 快捷方式配置在Application Shortcuts里可以创建开始菜单和桌面快捷方式。有个实用技巧卸载程序的快捷方式应该指向[SystemFolder]msiexec.exe /x [ProductCode]这样用户就能通过开始菜单正常卸载程序。记得在Installation Designer→Behavior and Logic里设置正确的ProductCode。5. 构建与测试5.1 单文件打包技巧在Releases里选择SingleImage配置把InstallShield Prerequisites Location设为Extract From Setup.exe。这样最终会生成单个setup.exe包含所有依赖项。我测试过这种方式比分开的exemsi更不容易被误删。5.2 常见错误排查生成时如果报错ISEXP : error -4365通常是文件被占用。关闭所有可能使用这些文件的程序包括VS。另一个常见问题是安装时提示Error 1001这通常是自定义操作的.NET程序集问题检查下是否勾选了Installer Class属性。测试安装包时建议在干净的虚拟机上进行。我习惯用以下检查清单安装路径包含中文是否正常卸载后是否完全清除快捷方式是否有效程序能否读取打包的资源文件6. 实战经验分享6.1 版本升级策略每次更新版本时除了修改Product Version还要注意升级规则。在Upgrade Paths里可以设置自动卸载旧版本。有个项目因为没设置这个导致用户电脑上同时存在多个版本。6.2 自定义安装界面在Installation Designer→Dialogs里可以修改安装界面。我一般会做这些调整替换默认banner图片尺寸492×58像素添加EULA许可协议隐藏不必要的选项页有个客户要求安装时显示自定义协议结果发现rtf文件编码不对。后来发现必须保存为ANSI编码的rtf才能正常显示。7. 企业级应用技巧7.1 静默安装参数商业软件经常需要静默安装通过命令行参数实现setup.exe /s /v/qn其中/s是InstallShield静默参数/qn是MSI的无界面参数。测试时可以先加/v/l*v log.txt参数生成日志文件。7.2 多语言支持虽然Limited Edition不支持完整多语言但可以通过变通方案实现。我采用的方法是准备不同语言的资源文件在Custom Actions里添加检测逻辑根据系统语言复制对应资源文件曾经做过一个中英文双语项目通过检测注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Language值来判断语言环境。8. 安装包优化技巧8.1 减小体积方法安装包过大会影响用户体验可以通过这些方法优化在Media里启用LZMA压缩排除不必要的依赖项如测试用的DLL对大型资源文件使用Compressed属性有个项目从300MB减到80MB主要靠排除开发调试用的符号文件.pdb。8.2 数字签名商业软件建议对安装包签名避免安全警告。具体步骤在Releases→Setup.exe设置里指定签名证书勾选Sign Setup.exe和Sign MSI Package时间戳服务器建议用http://timestamp.digicert.com遇到过证书链不完整的问题后来发现需要用完整的PFX文件包含中间证书。
VS2013实战:从零开始打造专业安装包(InstallShield全流程指南)
1. 为什么需要专业安装包制作工具第一次给客户交付软件时我直接把Debug文件夹压缩发过去结果对方电脑上根本运行不了。这才明白专业安装包的重要性——它不仅仅是把文件打个包那么简单。VS2013自带的InstallShield Limited Edition免费版就能解决这个问题而且比第三方工具更贴合开发环境。安装包的核心价值在于解决三个问题环境依赖比如.NET框架、文件部署自动放到正确位置、系统集成注册表、快捷方式等。我见过太多开发者在这上面栽跟头比如忘记打包关键DLL或者没考虑32/64位系统差异。使用InstallShield可以系统化解决这些问题。2. 环境准备与InstallShield安装2.1 获取InstallShield Limited Edition虽然VS2013安装时默认不带InstallShield但微软提供了免费版本。打开VS2013新建项目窗口在其他项目类型→安装和部署下会看到灰色的InstallShield图标点击它会跳转到注册页面。这里有个坑国家选择框默认没有中国选项。解决方法是在Country输入框右键选择检查在HTML代码里手动添加option valueChinaChina/option填完基本信息后即使页面报错也不用管注册码会发到邮箱。我实测从注册到收到邮件大概需要90秒。2.2 安装注意事项下载的InstallShield2015LE.exe注意版本号比VS2013高这是正常的安装时建议关闭VS2013。安装完成后需要重启VS这时新建项目里就能看到可用的InstallShield项目模板了。有个细节要注意如果解决方案里已经有其他项目记得右键解决方案→添加→新建项目而不是直接新建解决方案。3. 创建第一个安装项目3.1 基础配置要点新建InstallShield项目后首先在Application Information里设置软件名称会显示在安装界面版本号每次更新必须修改公司名称影响默认安装路径默认安装目录建议用[ProgramFilesFolder]变量这里最容易出错的是字符集设置一定要在General Information→Summary里把语言改为简体中文否则安装路径包含中文时会乱码。我有个项目就因为这个导致配置文件读取失败。3.2 文件部署实战在Application Files里添加要打包的文件时有几种典型场景主程序输出右键Project Assistant→Application Files添加Primary Output会自动包含exe和依赖的DLL配置文件单独添加app.config或web.config资源文件建议先在左侧创建虚拟文件夹如图片放Images文件夹对于需要注册的COM组件一定要在文件属性里勾选Self-registration。曾经有个项目因为漏掉这个设置导致ActiveX控件无法使用。4. 高级功能配置4.1 依赖项管理在Installation Requirements里可以设置系统要求最常用的是.NET Framework版本。建议勾选Launch Conditions里的版本检查这样安装时会自动检测。打包.NET Framework有技巧在Redistributables里勾选对应版本后InstallShield会下载离线包。如果网速慢可以手动下载dotNetFx45_Full_x86_x64.exe放到指定目录C:\Program Files (x86)\InstallShield\2015LE\SetupPrerequisites\Microsoft.net\4.5\Full4.2 快捷方式配置在Application Shortcuts里可以创建开始菜单和桌面快捷方式。有个实用技巧卸载程序的快捷方式应该指向[SystemFolder]msiexec.exe /x [ProductCode]这样用户就能通过开始菜单正常卸载程序。记得在Installation Designer→Behavior and Logic里设置正确的ProductCode。5. 构建与测试5.1 单文件打包技巧在Releases里选择SingleImage配置把InstallShield Prerequisites Location设为Extract From Setup.exe。这样最终会生成单个setup.exe包含所有依赖项。我测试过这种方式比分开的exemsi更不容易被误删。5.2 常见错误排查生成时如果报错ISEXP : error -4365通常是文件被占用。关闭所有可能使用这些文件的程序包括VS。另一个常见问题是安装时提示Error 1001这通常是自定义操作的.NET程序集问题检查下是否勾选了Installer Class属性。测试安装包时建议在干净的虚拟机上进行。我习惯用以下检查清单安装路径包含中文是否正常卸载后是否完全清除快捷方式是否有效程序能否读取打包的资源文件6. 实战经验分享6.1 版本升级策略每次更新版本时除了修改Product Version还要注意升级规则。在Upgrade Paths里可以设置自动卸载旧版本。有个项目因为没设置这个导致用户电脑上同时存在多个版本。6.2 自定义安装界面在Installation Designer→Dialogs里可以修改安装界面。我一般会做这些调整替换默认banner图片尺寸492×58像素添加EULA许可协议隐藏不必要的选项页有个客户要求安装时显示自定义协议结果发现rtf文件编码不对。后来发现必须保存为ANSI编码的rtf才能正常显示。7. 企业级应用技巧7.1 静默安装参数商业软件经常需要静默安装通过命令行参数实现setup.exe /s /v/qn其中/s是InstallShield静默参数/qn是MSI的无界面参数。测试时可以先加/v/l*v log.txt参数生成日志文件。7.2 多语言支持虽然Limited Edition不支持完整多语言但可以通过变通方案实现。我采用的方法是准备不同语言的资源文件在Custom Actions里添加检测逻辑根据系统语言复制对应资源文件曾经做过一个中英文双语项目通过检测注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Language值来判断语言环境。8. 安装包优化技巧8.1 减小体积方法安装包过大会影响用户体验可以通过这些方法优化在Media里启用LZMA压缩排除不必要的依赖项如测试用的DLL对大型资源文件使用Compressed属性有个项目从300MB减到80MB主要靠排除开发调试用的符号文件.pdb。8.2 数字签名商业软件建议对安装包签名避免安全警告。具体步骤在Releases→Setup.exe设置里指定签名证书勾选Sign Setup.exe和Sign MSI Package时间戳服务器建议用http://timestamp.digicert.com遇到过证书链不完整的问题后来发现需要用完整的PFX文件包含中间证书。