用inno setup或者其他软件打包exe程序 怎么防止重复安装的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用inno setup或者其他软件打包exe程序 怎么防止重复安装的问题相关的知识,希望对你有一定的参考价值。

我用java swing做了个桌面应用,然后用exe4j打成了exe文件,然后用inno setup打包程序,我现在有个问题是,打包程序时要写注册表什么的吗?如果安装后,再安装怎么做成提示修复或者卸载,而不是让它能再装一次,还有个问题,我的桌面应用可能需要更新,更新程序要怎么做,更新程序怎么查找目录,怎么更新程序的一部分,做到一些数据文件不更新,如上图,我不想更新程序覆盖data文件夹,可以覆盖其他文件夹,请求各位高手帮忙解答!!!!谢谢啦

inno setup
写不写注册表要看应用程序,应用程序用不到注册表的话就不用写。
你要求的用inno setup不太好做。
推荐用tiger installer,再安装有提示修复或者卸载选项。
参考技术A 你可以给 data 文件夹那些文件添加 Flag: onlyifdoesntexist

程序打包(安装包制作,Inno setup打包教程,QT程序打包)

一、简介

本文主要讲述如何将QT程序打包成安装包,提供给其他人使用。(打包其他程序同理)

二、准备阶段:

2.1 下载并安装打包工具 

Inno setup中文版 

密码:id09

2.2 将QT程序DLL快速关联

QT缺少DLL解决方案

例如,我已经成功demo.exe程序关联好dll。

返回上一层目录

该目录中:

Applications:存放程序的运行环境

License:存放软件的相关协议声明

ReleaseNote:编写了程序的相关更新说明

接下来,我们需要对这三个文件进行打包。

三、打包教程:

3.1 打开安装好的Inno setup软件。会自动弹出欢迎界面,选择用脚本向导创建新的脚本文件。

如果没有出现该界面,可以选择右上角的 文件→新建

3.2 同样可以打开 Inno Setup 脚本向导, 在对话框中点击 下一步

3.3 在 应用程序信息 中填写安装包的相关信息,其中加粗部分为必填。之后点击 下一步

3.4 在 应用程序文件夹 中保持默认即可,直接点击 下一步

3.5 在 应用程序文件中 点击 浏览,选择需要执行的EXE程序

应用程序文件中 点击 添加文件夹,将 Applications文件夹选中后点击 确定

之后会弹出提醒框,点击 确定 即可

同理,将License文件夹加入,该步骤 略,和上面相同。

之后选择 添加文件,将ReleaseNote.txt选中。

成功完成以上步骤后,结果如下,点击下一步

3.6 在 应用程序快捷方式 依据相关需求,勾选后点击 下一步

3.7 在 应用程序文档 中直接点击下一步(PS:如果有相关需求,自行添加即可)

3.8 在 安装程序模式 中勾选相应内容后点击下一步

3.9 在 安装语言 中勾选相应内容后点击下一步

3.10 在 编译配置中 自行输入相关内容后点击下一步。

自定义编译器输出文件夹:这是安装包的存放路径

编译器输出基本文件名:这是安装包的名字

自定义安装程序图标文件:随便选择一张ico图片,将作为安装包的图标。

安装密码:依照需求选填。

3.11 在 Inno Setup 预处理器 勾选 是 后点击 下一步

3.12 点击 完成 即可

3.13 完成出现编译提醒,点击是

3.14 选择一个文件夹用于存放脚本后等待编译 完成 即可

3.15 编译完成后 在 3.10步骤选择的文件夹中 找到编译完成的安装包程序

四、测试

4.1 双击 demo_setup.exe,选择 仅为当前用户安装

4.2 选择好 安装路径后 点击 下一步

4.3 保持默认不变,直接点击 下一步

4.4 勾选 创建桌面快捷方式 后点击 下一步

4.5 点击 安装

4.6 点击 完成 

后程序将自动运行

同时观察桌面,已经成功生成了相关的快捷方式,双击快捷方式也能够正常运行程序

五、问题及优化

问题一:

进入到项目的安装路径中,发现文件已经乱成一锅粥

这和我们需要的安装后的文件路径完全不一样,以下是我们希望安装后呈现的文件排列方式

问题二:

在项目路径中可以看到,卸载程序的名字为unins000.exe。

问题三:

进入到控制面板中的程序和功能页面,会发现Demo的卸载项是没有图标的

5.1 脚本代码优化

为了解决以上两个问题,我们需要对代码进行优化修改。

对于问题一:

首先找到 [Files] 并将原命令进行修改:

之后找到 [Icons] 并将命令进行修改

原:

新:

之后再找到 [Run] 并将命令进行修改

原:

新:

修改后点击运行

安装后的结果:

对于问题二:

可以在 [Run] 之后加入以下代码

[CODE]
procedure CurStepChanged(CurStep: TSetupStep);
var
uninspath, uninsname, NewUninsName, MyAppName: string;
begin
if CurStep=ssDone then
begin
// 指定新的卸载文件名(不包含扩展名),请相应修改!
NewUninsName := 'uninstall_Demo';
// 应用程序名称,与 [SEUTP] 段的 AppName 必须一致,请相应修改!
MyAppName := 'Demo';
// 以下重命名卸载文件
uninspath:= ExtractFilePath(ExpandConstant('uninstallexe'));
uninsname:= Copy(ExtractFileName(ExpandConstant('uninstallexe')),1,8);
RenameFile(uninspath + uninsname + '.exe', uninspath + NewUninsName + '.exe');
RenameFile(uninspath + uninsname + '.dat', uninspath + NewUninsName + '.dat');
// 以下修改相应的注册表内容
if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\' + MyAppName + '_is1') then
begin
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\' + MyAppName + '_is1', 'UninstallString', '"' + uninspath + NewUninsName + '.exe"');
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\' + MyAppName + '_is1', 'QuietUninstallString', '"' + uninspath + NewUninsName + '.exe" /SILENT');
end;
end;
end;

结果:

对于问题三:

只需要在脚本中 [Setup] 下加入一下两条命令,即可生成卸载图标

安装后的结果:

以上是关于用inno setup或者其他软件打包exe程序 怎么防止重复安装的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Inno Setup Compiler制作安装软件包

inno setup将 exe文件和.NETFramework如何一起打包

NSIS 或 Inno Setup打包软件如何得到当前文件名

用inno setup打包安装工具生成的EXE程序,在安装的时出现【试图在初始化之前展开“app”常量】怎么解决?

Inno Setup软件如何把多个安装包程序打包在一起,并一起运行呢?我看你的问题你会了吧,谢谢

Winfrom打包教程(Inno Setup工具)