inno打包写注册表

qq_25044889 2015-01-05 01:55:43
如果我默认目录,那么注册表还是我ROOT下面的,如果我更改了路径,这注册表的目录就不是ROOT下面的了,求指教,这是什么原因???
[Files]
Source: D:\Inno Setup 5\test\*.*; DestDir: {app}
[Registry]
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows\CurrentVersion\MyApp; ValueType: string; ValueName: Path; ValueData: {app}\unins000.exe; Flags: uninsdeletekey
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows\CurrentVersion\MyApp; ValueType: string; ValueName: version; ValueData: 1.0; Flags: uninsdeletekey
[UninstallDelete]
Name: {app}; Type: filesandordirs
[Setup]
AppName=测试程序
AppVerName=测试程序1.0
InfoBeforeFile=D:\Inno Setup 5\test\Readme.txt
LicenseFile=D:\Inno Setup 5\test\ISPPExample1License.txt
DefaultDirName={pf}\测试程序
AppID={{F1CFFC3D-2198-4221-9665-917CECB68229}
UninstallLogMode=overwrite
[Code]
function InitializeSetup(): boolean;
var
PathStr : String;
VersionStr : String;
ErrorCode: Integer;
begin
result := true;
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\MyApp', 'Path', PathStr) and
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\MyApp', 'Version', VersionStr) then
begin
if MsgBox('检测到已存在版本[' + VersionStr + '],是否卸载原版本', mbConfirmation, MB_YESNO) = idYes then begin
PathStr := RemoveQuotes(PathStr);
Exec(PathStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode)
end else
result := false;
end;

end;
//第一次运行ISTool软件先要在菜单的“文件”“参数”中制定Inno Setup的位置
//编译时若提示某些变量没有定义,大部分在工具栏的“选项”“应用程序中”
// Code段的代码是检测是否安装了以前版本,有则提示用户删除
// 最好是在工具栏的“选项”“卸载”页把“卸载日志模式”改为覆盖,这样卸载程序就固定为“unins000.exe”
// 默认是生成32位安装程序,所以注册表信息在64位操作系统下是放在Wow6432Node节点下。
...全文
223 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-01-05
  • 打赏
  • 举报
回复
我只用WinRar自解压包打包我写的应用程序。
qq_25044889 2015-01-05
  • 打赏
  • 举报
回复
在线等,,求问啊???

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧