我简单的使用innosetup创建了应用安装包,发现了几个问题
1.加入的目录在安装后直接释放在程序目录
我在制作时候加入了比如lib这个目录,里面有liba这个文件,程序安装后希望在程序目录里有lib文件夹,并且里面包含liba文件,但是结果是直接把lib文件夹里面的liba文件释放在程序目录里了。程序目录里没有lib这个文件夹。
解决办法是编辑脚本
Source: "C:\Users\jack\Desktop\App\lib\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
改成
Source: "C:\Users\jack\Desktop\App\lib\*"; DestDir: "{app}\lib\"; Flags: ignoreversion recursesubdirs createallsubdirs
2.自动创建的快捷方式起始位置是空的
程序安装后,会有一个自动创建快捷方式的按钮,勾选了就会自动创建快捷方式。但是当程序通过该快捷方式启动时,发现程序有的地方有错误。
查看innosetup自动创建的快捷方式,它的起始位置字段为空。但是程序有的地方根据当前工作路径来确认资源位置。这就导致了程序不能正确获取工作目录。
我使用GetModuleFileName API来获取可执行文件位置来确认工作目录,这种办法不受影响。但是使用GetCurrentDirectory API来获取程序目录的话,就会出错。如果是使用./这种办法来代表程序当前目录,也可能出错。
所以需要让自动创建的快捷方式起始位置为程序安装目录,解决办法就是修改脚本:
[Icons]
Name: "{commondesktop}\MyApp"; Filename: "{app}\MyApp.exe"; Tasks: desktopicon;
修改成
[Icons]
Name: "{commondesktop}\MyApp"; Filename: "{app}\MyApp.exe"; Tasks: desktopicon; WorkingDir:"{app}"
如何静默安装
使用命令提示符执行安装程序,在安装程序后面加入/SILENT参数是静默安装,显示进度条,加入/VERYSILENT参数是完全静默安装,不显示任何东西。