node-webkit 和 inno setup:安装包的那点事儿

node-webkit是个很赞的想法,奈何问题较多,很多在目前的版本下难以解决(异形窗口之类的)…..这次总结下安装包的制作,使用到了inno setup,网上有很多教程,需要的可以自行搜索,下面主要讲下我在打包node-webkit应用的时候遇到的问题。

卸载(安装)的时候删除注册表

我的node-webkit应用可以设置开机自启动,会写入到注册表中,在卸载的时候需要删除注册表项目,用法很简单,在iss文件里加入一行:

[Registry]
Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: <键名>; Flags: dontcreatekey uninsdeletevalue

上面的代码是卸载时删除注册表的(uninsdeletevalue),具体关于[Registry] 的可以看官方的文档

安装和卸载的时候判断程序是否正在运行

卸载inno setup打包的node-webkit应用时,如果程序正在运行,会卸载不完全(主要文件都还在,而且还可以运行),所以要检测一下,如果程序正在运行,就弹出提示,退出卸载。安装也是同样的道理。这里用到了两个函数InitializeSetupInitializeUninstall ,分别在安装和卸载时执行。具体代码如下:

[Code]
function IsAppRunning(const FileName : string): Boolean;
var
    FSWbemLocator: Variant;
    FWMIService   : Variant;
    FWbemObjectSet: Variant;
begin
    Result := false;
    FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator');
    FWMIService := FSWbemLocator.ConnectServer('', 'root\CIMV2', '', '');
    FWbemObjectSet := FWMIService.ExecQuery(Format('SELECT Name FROM Win32_Process Where Name="%s"',[FileName]));
    Result := (FWbemObjectSet.Count > 0);
    FWbemObjectSet := Unassigned;
    FWMIService := Unassigned;
    FSWbemLocator := Unassigned;
end;

function InitializeSetup(): Boolean;
begin
  if IsAppRunning( '<这里是实际运行的exe>.exe' ) then
  begin
    MsgBox( '"<你的程序>" is running, please close it and run again setup.',
             mbError, MB_OK );
    Result := false;
  end
  else Result := true;
end;

function InitializeUninstall(): Boolean;
begin
  if IsAppRunning( '<这里是实际运行的exe>.exe' ) then
  begin
    MsgBox( '"<你的程序>" is running, please close it and run again uninstall.',
             mbError, MB_OK );
    Result := false;
  end
  else Result := true;
end;

卸载时删除指定文件夹

node-webkit包含一个webkit的内核,卸载之后,他的cookie和localStorage都会保留,这显然不是我们想要的,所以在卸载之后(或者安装之前)要删除这些数据:

[InstallDelete]
Type: filesandordirs; Name: "{localappdata}\your-app-name"

[UninstallDelete]
Type: filesandordirs; Name: "{localappdata}\your-app-name"

上面的{localappdata} 就是本地的数据目录,下面有个和你的应用同名的目录,是node-webkit创建的,直接删除即可。



标签: ,

无觅相关文章插件,快速提升流量