PageSourceSearch

https://keenwon.com/assets/js/blog-1317.9adcc954.js

js keenwon.com collected 2026-09-25 22:17:02 UTC 15,653 bytes, 1 lines download raw bytes

1"use strict";(self.__LOADABLE_LOADED_CHUNKS__=self.__LOADABLE_LOADED_CHUNKS__||[]).push([[3480],{43508:function(e,n,i){i.r(n),i.d(n,{default:function(){return o}});var s=i(30758),t=i(86070),a=i(99694);function r(e){const n=Object.assign({p:"p",a:"a",h2:"h2",pre:"pre",code:"code"},(0,a.RP)(),e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["node-webkit 是个很赞的想法,奈何问题较多,很多在目前的版本下难以解决(异形窗口之类的)…..这次总结下安装包的制作,使用到了",(0,t.jsx)(n.a,{href:"http://www.jrsoftware.org/isinfo.php",children:"inno setup"}),",网上有很多教程,需要的可以自行搜索,下面主要讲下",(0,t.jsx)(n.a,{href:"/1317",children:"我在打包 node-webkit"}),"应用的时候遇到的问题。"]}),"\n",(0,t.jsx)(n.h2,{children:"卸载(安装)的时候删除注册表"}),"\n",(0,t.jsxs)(n.p,{children:["我的 node-webkit 应用可以设置",(0,t.jsx)(n.a,{href:"/1324",children:"开机自启动"}),",会写入到注册表中,在卸载的时候需要删除注册表项目,用法很简单,在 iss 文件里加入一行:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'    [Registry]\n    Root: HKCU; Subkey: "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; ValueType: string; ValueName: <键名>; Flags: dontcreatekey uninsdeletevalue\n'})}),"\n",(0,t.jsxs)(n.p,{children:["上面的代码是卸载时删除注册表的(uninsdeletevalue),具体关于",(0,t.jsx)(n.code,{children:"[Registry]"})," 的可以看",(0,t.jsx)(n.a,{href:"http://www.jrsoftware.org/ishelp/index.php?topic=registrysection",children:"官方的文档"}),"。"]}),"\n",(0,t.jsx)(n.h2,{children:"安装和卸载的时候判断程序是否正在运行"}),"\n",(0,t.jsxs)(n.p,{children:["卸载 inno setup 打包的 node-webkit 应用时,如果程序正在运行,会卸载不完全(主要文件都还在,而且还可以运行),所以要检测一下,如果程序正在运行,就弹出提示,退出卸载。安装也是同样的道理。这里用到了两个函数",(0,t.jsx)(n.code,{children:"InitializeSetup"})," 和",(0,t.jsx)(n.code,{children:"InitializeUninstall"})," ,分别在安装和卸载时执行。具体代码如下:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"    [Code]\n    function IsAppRunning(const FileName : string): Boolean;\n    var\n        FSWbemLocator: Variant;\n        FWMIService   : Variant;\n        FWbemObjectSet: Variant;\n    begin\n        Result := false;\n        FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator');\n        FWMIService := FSWbemLocator.ConnectServer('', 'root\\CIMV2', '', '');\n        FWbemObjectSet := FWMIService.ExecQuery(Format('SELECT Name FROM Win32_Process Where Name=\"%s\"',[FileName]));\n        Result := (FWbemObjectSet.Count > 0);\n        FWbemObjectSet := Unassigned;\n        FWMIService := Unassigned;\n        FSWbemLocator := Unassigned;\n    end;\n\n    function InitializeSetup(): Boolean;\n    begin\n      if IsAppRunning( '<这里是实际运行的exe>.exe' ) then\n      begin\n        MsgBox( '\"<你的程序>\" is running, please close it and run again setup.',\n                 mbError, MB_OK );\n        Result := false;\n      end\n      else Result := true;\n    end;\n\n    function InitializeUninstall(): Boolean;\n    begin\n      if IsAppRunning( '<这里是实际运行的exe>.exe' ) then\n      begin\n        MsgBox( '\"<你的程序>\" is running, please close it and run again uninstall.',\n                 mbError, MB_OK );\n        Result := false;\n      end\n      else Result := true;\n    end;\n"})}),"\n",(0,t.jsx)(n.h2,{children:"卸载时删除指定文件夹"}),"\n",(0,t.jsx)(n.p,{children:"node-webkit 包含一个 webkit 的内核,卸载之后,他的 cookie 和 localStorage 都会保留,这显然不是我们想要的,所以在卸载之后(或者安装之前)要删除这些数据:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'    [InstallDelete]\n    Type: filesandordirs; Name: "{localappdata}\\your-app-name"\n\n    [UninstallDelete]\n    Type: filesandordirs; Name: "{localappdata}\\your-app-name"\n'})}),"\n",(0,t.jsxs)(n.p,{children:["上面的",(0,t.jsx)(n.code,{children:"{localappdata}"})," 就是本地的数据目录,下面有个和你的应用同名的目录,是 node-webkit 创建的,直接删除即
1可。"]})]})}var l=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=Object.assign({},(0,a.RP)(),e.components).wrapper;return n?(0,t.jsx)(n,Object.assign({},e,{children:(0,t.jsx)(r,e)})):r(e)},c=i(33639);var o=()=>(0,t.jsxs)(s.Fragment,{children:[(0,t.jsx)("style",{type:"text/css",dangerouslySetInnerHTML:{__html:'.markdown-body{--base-size-16:1rem;--base-size-24:1.5rem;--base-size-4:0.25rem;--base-size-40:2.5rem;--base-size-8:0.5rem;--base-text-weight-medium:500;--base-text-weight-normal:400;--base-text-weight-semibold:600;--fontStack-monospace:ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;--fontStack-sansSerif:-apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--fgColor-accent:Highlight}@media (prefers-color-scheme:dark){.markdown-body{color-scheme:dark;--fgColor-accent:#4493f8;--bgColor-attention-muted:#bb800926;--bgColor-default:#0d1117;--bgColor-muted:#151b23;--bgColor-neutral-muted:#656c7633;--borderColor-accent-emphasis:#1f6feb;--borderColor-attention-emphasis:#9e6a03;--borderColor-danger-emphasis:#da3633;--borderColor-default:#3d444d;--borderColor-done-emphasis:#8957e5;--borderColor-success-emphasis:#238636;--color-prettylights-syntax-brackethighlighter-angle:#9198a1;--color-prettylights-syntax-brackethighlighter-unmatched:#f85149;--color-prettylights-syntax-carriage-return-bg:#b62324;--color-prettylights-syntax-carriage-return-text:#f0f6fc;--color-prettylights-syntax-comment:#9198a1;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-constant-other-reference-link:#a5d6ff;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-markup-bold:#f0f6fc;--color-prettylights-syntax-markup-changed-bg:#5a1e02;--color-prettylights-syntax-markup-changed-text:#ffdfb6;--color-prettylights-syntax-markup-deleted-bg:#67060c;--color-prettylights-syntax-markup-deleted-text:#ffdcd7;--color-prettylights-syntax-markup-heading:#1f6feb;--color-prettylights-syntax-markup-ignored-bg:#1158c7;--color-prettylights-syntax-markup-ignored-text:#f0f6fc;--color-prettylights-syntax-markup-inserted-bg:#033a16;--color-prettylights-syntax-markup-inserted-text:#aff5b4;--color-prettylights-syntax-markup-italic:#f0f6fc;--color-prettylights-syntax-markup-list:#f2cc60;--color-prettylights-syntax-meta-diff-range:#d2a8ff;--color-prettylights-syntax-storage-modifier-import:#f0f6fc;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-string-regexp:#7ee787;--color-prettylights-syntax-sublimelinter-gutter-mark:#3d444d;--color-prettylights-syntax-variable:#ffa657;--fgColor-attention:#d29922;--fgColor-danger:#f85149;--fgColor-default:#f0f6fc;--fgColor-done:#ab7df8;--fgColor-muted:#9198a1;--fgColor-success:#3fb950;--borderColor-muted:#3d444db3;--color-prettylights-syntax-invalid-illegal-bg:var(--bgColor-danger-muted);--color-prettylights-syntax-invalid-illegal-text:var(--fgColor-danger);--focus-outlineColor:var(--borderColor-accent-emphasis);--borderColor-neutral-muted:var(--borderColor-muted)}}@media (prefers-color-scheme:light){.markdown-body{color-scheme:light;--fgColor-danger:#d1242f;--bgColor-attention-muted:#fff8c5;--bgColor-muted:#f6f8fa;--bgColor-neutral-muted:#818b981f;--borderColor-accent-emphasis:#0969da;--borderColor-attention-emphasis:#9a6700;--borderColor-danger-emphasis:#cf222e;--borderColor-default:#d1d9e0;--borderColor-done-emphasis:#8250df;--borderColor-success-emphasis:#1a7f37;--color-prettylights-syntax-brackethighlighter-angle:#59636e;--color-prettylights-syntax-brackethighlighter-unmatched:#82071e;--color-prettylights-syntax-carriage-return-bg:#cf222e;--color-prettylights-syntax-carriage-return-text:#f6f8fa;--color-prettylights-syntax-comment:#59636e;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-constant-other-reference-link:#0a3069;--color-prettylights-syntax-entity:#6639ba;--color-prettylights-syntax-entity-tag:#0550ae;--color-prettylights-syntax-invalid-illegal-text:var(--fgColor-danger);--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-markup-changed-bg:#ffd8b5;--color-prettylights-syntax-markup-changed-text:#953800;--color-prettylights-syntax-markup-deleted-bg:#ffebe9;--color-prettylights-syntax-markup-deleted-text:#82071e;--color-prettylights-syntax-markup-heading:#0550ae;--color-prettylights-syntax-markup-ignored-bg:#0550ae;--color-prettylights-syntax-markup-ignored-text:#d1d9e0;--color-prettylights-syntax-markup-inserted-bg:#dafbe1;--color-prettylights-syntax-markup-inserted-text:#116329;--color-prettylights-syntax-markup-list:#3b2300;--color-prettylights-syntax-meta-diff-range:#8250df;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-string-regexp:#116329;--color-prettylights-syntax-sublimelinter-gutter-mark:#818b98;--color-prettylights-syntax-variable:#953800;--fgColor-accent:#0969da;--fgColor-attention:#9a6700;--fgColor-done:#8250df;--fgColor-muted:#59636e;--fgColor-success:#1a7f37;--bgColor-default:#ffffff;--borderColor-muted:#d1d9e0b3;--color-prettylights-syntax-invalid-illegal-bg:var(--bgColor-danger-muted);--color-prettylights-syntax-markup-bold:#1f2328;--color-prettylights-syntax-markup-italic:#1f2328;--color-prettylights-syntax-storage-modifier-import:#1f2328;--fgColor-default:#1f2328;--focus-outlineColor:var(--borderColor-accent-emphasis);--borderColor-neutral-muted:var(--borderColor-muted)}}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0;font-weight:var(--base-text-weight-normal, 400);color:var(--fgColor-default);background-color:var(--bgColor-default);font-family:var(--fontStack-sansSerif, -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji");font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body a{text-decoration:underline;text-underline-offset:.2rem}.markdown-body [hidden]{display:none!important}.markdown-body a{background-color:transparent;color:var(--fgColor-accent);text-decoration:none}.markdown-body b,.markdown-body strong{font-weight:var(--base-text-weight-semibold, 600)}.markdown-body h1{margin:.67em 0;font-weight:var(--base-text-weight-semibold, 600);padding-bottom:.3em;font-size:2em;border-bottom:1px solid var(--borderColor-muted)}.markdown-body img{border-style:none;max-width:100%;box-sizing:content-box}.markdown-body code,.markdown-body pre{font-family:monospace;font-size:1em}.markdown-body [type=button]{-webkit-appearance:button;appearance:button}.markdown-body ::-webkit-input-placeholder{color:inherit;opacity:.54}.markdown-body ::-webkit-file-upload-button{-webkit-appearance:button;appearance:button;font:inherit}.markdown-body a:hover{text-decoration:underline}.markdown-body ::placeholder{color:var(--fgColor-muted);opacity:1}.markdown-body a:focus{outline:2px solid var(--focus-outlineColor);outline-offset:-2px;box-shadow:none}.markdown-body a:focus:not(:focus-visible){outline:solid 1px transparent}.markdown-body a:focus-visible{outline:2px solid var(--focus-outlineColor);outline-offset:-2px;box-shadow:none}.markdown-body a:not([class]):focus,.markdown-body a:not([class]):focus-visible{outline-offset:0}.markdown-body h1,.markdown-body h2{margin-top:var(--base-size-24);margin-bottom:var(--base-size-16);font-weight:var(--base-text-weight-semibold, 600);line-height:1.25}.markdown-body h2{font-weight:var(--base-text-weight-semibold, 600);padding-bottom:.3em;font-size:1.5em;border-bottom:1px solid var(--borderColor-muted)}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body ul{margin-top:0;margin-bottom:0;padding-left:2em}.markdown-body code{font-family:var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);font-size:12px}.markdown-body pre{margin-top:0;margin-bottom:0;font-family:var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);font-size:12px;word-wrap:normal}.markdown-body::before{display:table;content:""}.markdown-body::after{display:table;clear:both;content:""}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body p,.markdown-body ul,.markdown-body pre{margin-top:0;margin-bottom:var(--base-size-16)}.markdown-body h1 code,.markdown-body h2 code{padding:0 .2em;font-size:inherit}.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:var(--base-size-16)}.markdown-body li+li{margin-top:.25em}.markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;background-color:var(--bgColor-neutral-muted);border-radius:6px}.markdown-body pre code{font-size:100%}.markdown-body pre>code{padding:0;margin:0;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body pre{padding:var(--base-size-16);overflow:auto;font-size:85%;line-height:1.45;color:var(--fgColor-default);background-color:var(--bgColor-muted);border-radius:6px}.markdown-body pre code{display:inline;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body button:focus:not(:focus-visible),.markdown-body a:focus:not(:focus-visible){outline:0;box-shadow:none}.markdown-body a:has(>p,>div,>pre,>blockquote){display:block}.markdown-body a:has(>p,>div,>pre,>blockquote):not(:has(.snippet-clipboard-content,>pre)){width:fit-content}.markdown-body a:has(>p,>div,>pre,>blockquote):has(.snippet-clipboard-content,>pre):focus-visible{outline:2px solid var(--focus-outlineColor);outline-offset:2px}.markdown-body ::-webkit-calendar-picker-indicator{filter:invert(50%)}'}}),(0,t.jsx)(c.A,{blogInfo:{id:"0000-archive-1317-index",title:"node-webkit 和 inno setup:安装包的那点事儿",date:14077152e5,mdxPath:"0000-archive/1317/index.mdx",slug:"/1317",readingTime:"4",chars:"601",tags:[{name:"node-webkit",pathName:"node-webkit"},{name:"Node.js",pathName:"node.js"},{name:"2014",pathName:"2014"}]},children:(0,t.jsx)(l,{})})]})},33639:function(e,n,i){i.d(n,{A:function(){return f}});var s=i(30758),t=i(12670),a=i(63288),r=i(4068),l=i(27198),c=i(13888),o=i(27661),d=i(99330),h=i(20695),p=i(24637),x=i(23485),j="main-xS22",u="left-TOUB",g="right-ohyM",m="toc-HUD5",b=i(86070);var f=e=>{var n;let i=e.children,f=e.blogInfo;return(0,b.jsxs)(s.Fragment,{children:[(0,b.jsx)(t.mg,{children:(0,b.jsx)("title",{children:f.title})}),(0,b.jsx)("aside",{className:u}),(0,b.jsxs)("main",{className:j,children:[(0,b.jsxs)("article",{children:[(0,b.jsx)(a.A,{title:f.title,date:(0,p.A)(f.date),readingTime:f.readingTime,chars:f.chars}),(0,b.jsx)(r.A,{type:"detail",children:i}),(0,b.jsx)(l.A,{tags:f.tags})]}),(0,b.jsx)(o.A,{}),(0,b.jsx)(h.A,{}),(0,b.jsx)(d.A,{})]}),(0,b.jsx)("aside",{className:g,children:-1===(null==f||null===(n=f.tags)||void 0===n?void 0:n.findIndex(e=>"笔记"===e.name))&&(0,b.jsx)("div",{className:m,children:(0,b.jsx)(c.A,{})})}),(0,b.jsx)(x.OA,{})]})}},829:function(e,n,i){e.exports=i.p+"assets/image/f39ac524.png"}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.