打包c#程序(续)
之前有说过使用VS自带的安装项目来打包程序,其中也说过那东西打包出来的安装程序和framework是分开的,使用上来说也不差,但是给用户难免一个说明,还要点两次,不能一傻到底。没办法,又花了点时间测试使用了inno setup来打包c#程序。效果就是:安装程序和运行库打包成一个可执行文件,会根据用户是否需要安装环境来决定是否自动安装,可谓一路下一步傻到底即可。下面给出简单步骤:
1、打开inno setup,使用“脚本向导”来创建脚本。根据步骤输入相关的信息即可。
2、然后在生成的代码中添加如下代码即可:
[code]
function CheckDotNet2_0():boolean;
begin
Result:= not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\Policy\v2.0');
end;function InitializeSetup(): Boolean;
var Path:string;
ResultCode: Integer;
begin
if CheckDotNet2_0() then
begin
ExtractTemporaryFile('dotnetfx.exe');
Exec(ExpandConstant('{tmp}/dotnetfx.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
end;
if CheckDotNet2_0() then
begin
MsgBox('请不要跳过所需运行环境安装向导!',mbInformation,MB_OK);
Result:=false;
end
else
begin
Result:=true;
end;
end;
上面的效果就是检测注册表是否已经安装了framework2.0,如果安装了就跳过执行安装自己的程序(Result:=true),然后没装framework那么就将打包进程序的framework解压到系统临时目录,然后执行安装,安装后再安装自己的程序。
3、上面的做法基本解决了一傻到底的需求。不过在不同的win系统上体验却不同。囧。即如果完全按照上面的来在xp下可以很方便的生成开始菜单和桌面的快捷菜单,而vista/7系统则不能生成快捷方式。原因没有琢磨出来,估计和权限有关吧。后来采用了一种迂回不是很爽的方式勉强代替,即添加如下代码(记住替换掉“脚本向导”生成的代码),
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\px\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon;
Name: "{commondesktop}\px\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"; Tasks: desktopicon;
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";
效果是在xp/7下可以顺利的生成快捷方式,但是在7下不会在开始菜单中出现快捷方式(实时上在C:\ProgramData\Microsoft\Windows\Start Menu\Programs可以找到快捷方式文件夹,但是死活不出现在开始菜单中,气!故这里当作失败,因为不能当作用户会在上面那个路径下找快捷方式啊!),所以将执行程序和卸载程序的快捷方式全部放在一个桌面的文件夹下(如上ICONS,TASKS),省的用户去找。
inno setup还是很强力的,不过时间原因没有做过多的研究,就先根据上面的认识做成这样吧。
参考资料:
1、http://alien006.blog.163.com/blog/static/117655022009212324470/
2、http://www.cnblogs.com/cscs/archive/2010/04/14/1711803.html
3、http://blog.csdn.net/zhoufoxcn/article/details/5334809
4、http://www.cnblogs.com/hualei/archive/2010/08/24/1807416.html