本文主要记录使用Inno Setup制作setup.exe安装文件过程中遇到的问题和解决方案。
1.Inno Setup 基本使用请参考:
http://www.cnblogs.com/ahuo/archive/2007/07/16/819738.html
2.安装时提示需要关闭以下应用程序:Microsoft Visual Studio 2010,Microsoft (R) Visual C++ Package Server
出现这个提示的原因:用VS2010编译出来的共享库或者插件(如果是exe,选择静态库不会出现这种情况的,Activex是不能选择静态库的)在其他机器上运行,需要复制mfc100.dll,msvcr100.dll等dll文件到{sys},如果有些机器上已经有这些文件,而且还在占用着,就会出现这个提示。即使在安装文件中加入了限制条件:如果存在不复制。
一开始觉得无所谓,出现就出现吧,又不影响安装。后来发现在有的机器上如果选择了“自动关闭该应用程序”,我自己程序不能用了。必须得解决啊,就开始研究InnoSetup的用法,发现没有跟这个问题相关的属性和用法。最后想到了批处理,不用Innosetup的脚本直接复制这些dll文件到{sys}中,通过bat命令。 希望有遇到类似问题的童鞋可以找到一种解决方法.如果有人知道其他方法,可以留言相互交流。
3.Inno Setup调用bat文件.
在 [Files] 段里加上你自己的批处理文件,比如:
Source: "copy.bat"; DestDir: "{app}"; Flags: ignoreversion
在 [Run] 段里加上安装后的运行命令,比如:
Filename: "{app}\copy.bat"; Flags: nowait
4.bat脚本命令的编写
需要判断系统是32或64位
@echo off @title 判断是否需要复制mfc100.dll等 if exist C:\Windows\SysWOW64 ( echo "存在C:\Windows\SysWOW64" if exist C:\Windows\SysWOW64\mfc100.dll ( echo "C:\Windows\SysWOW64\mfc100.dll已存在" )else ( copy mfc100.dll C:\Windows\SysWOW64\mfc100.dll ) ) else ( if exist C:\Windows\System32\mfc100.dll ( echo "C:\Windows\System32\mfc100.dll已存在" )else ( copy mfc100.dll C:\Windows\System32\mfc100.dll ) )