无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4091|回复: 11
打印 上一主题 下一主题

[求助] 請教 Innosetup 腳本代码的寫法

[复制链接]
跳转到指定楼层
1#
发表于 2023-4-10 22:33:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 hsm570911 于 2023-4-10 22:37 编辑

请问以下解码的代码如何恢复成 Innosetup 原始的 Pascal 脚本写法。
尝试写了好几次好像都不太对,哈!
  1. function INITIALIZESETUP(): BOOLEAN;
  2. var
  3.         v_1, v_2, v_5, v_9, v_21, v_26: BOOLEAN;
  4.         v_3, v_6, v_10, v_22, v_23: Integer;
  5.         v_4, v_8, v_12, v_13, v_14, v_15, v_17, v_18, v_19, v_20, v_25, v_27: UnicodeString;
  6.         v_7, v_24: TMSGBOXTYPE;
  7.         v_11, v_16: String;
  8. begin
  9.         label_3327:
  10.         label_3342:
  11.         v_3 := 2;
  12.         v_4 := 'passolo_wise';
  13.         v_1 := CHECKFORMUTEXES(v_4);
  14.         v_1 := not v_1;
  15.         v_5 := v_1;
  16.         v_5 := not v_5;
  17.         flag := not v_5;
  18.         if flag then goto label_3545;
  19.         label_3455:
  20.         v_6 := 5;
  21.         v_7 := 2;
  22.         v_8 := '安裝程式已經執行!';
  23.         v_3 := MSGBOX(v_8, v_7, v_6);
  24.         label_3545:
  25.         v_9 := v_3 = 4;
  26.         flag := not v_9;
  27.         if flag then goto label_3589;
  28.         label_3584:
  29.         goto label_3342;
  30.         label_3589:
  31.         v_15 := '{src}';
  32.         v_14 := EXPANDCONSTANT(v_15);
  33.         v_13 := GETSHORTNAME(v_14);
  34.         v_12 := UPPERCASE(v_13);
  35.         v_11 := v_12;
  36.         v_20 := '{%TMP}';
  37.         v_19 := EXPANDCONSTANT(v_20);
  38.         v_18 := GETSHORTNAME(v_19);
  39.         v_17 := UPPERCASE(v_18);
  40.         v_16 := v_17;
  41.         v_10 := POS(v_16, v_11);
  42.         v_2 := v_10 <> 0;
  43.         v_2 := not v_2;
  44.         v_21 := v_2;
  45.         v_21 := not v_21;
  46.         flag := not v_21;
  47.         if flag then goto label_4115;
  48.         label_3875:
  49.         v_23 := 0;
  50.         v_24 := 0;
  51.         v_25 := '警告!由於某些原因安裝程式正嘗試從作業系統的暫存檔案目錄中啟動
  52. 通常這是安裝程式被非法植入惡意程式所造成的。安裝程式將自動終止!
  53. 請您確認程式來源是否可靠! ';
  54.         v_22 := MSGBOX(v_25, v_24, v_23);
  55.         label_4115:
  56.         v_26 := v_2;
  57.         flag := not v_26;
  58.         if flag then goto label_4194;
  59.         label_4144:
  60.         v_27 := 'passolo_wise';
  61.         CREATEMUTEX(v_27);
  62.         label_4194:
  63.         result := v_1;
  64.         if not result then goto label_4227;
  65.         label_4215:
  66.         result := result and v_2;
  67.         label_4227:
  68.         exit;
  69. end;
复制代码





9#
 楼主| 发表于 2023-4-11 15:56:18 | 只看该作者
hua_wuxin 发表于 2023-4-11 14:30
哈哈过奖了,我也是借机挑战了一下自己,第一次尝试去严格还原一段反编译出来的Pascal Script代码,其实 ...

所有的代码段都弄好了,程序编译后也能正常运行安装跟解除安装,真是太赞啦,再次谢谢
hua_wuxin 大大,辛苦了。
回复

使用道具 举报

8#
发表于 2023-4-11 14:30:26 | 只看该作者
hsm570911 发表于 2023-4-11 08:44
非常感谢 hua_wuxin 大大的指导,受惠良多。
感觉  Inno setup 的代码部份 Pascal 脚本有点难学。
好像 ...

哈哈过奖了,我也是借机挑战了一下自己,第一次尝试去严格还原一段反编译出来的Pascal Script代码,其实是花了不少时间才搞出来的。

确实如3楼所说“一般不需要 Code 代码段”,本贴中这个INITIALIZESETUP代码段就是没完全必要存在的,只是安装的原作者的个人恶趣味罢了。

点评

所有的代码段都弄好了,程序编译后也能正常运行安装跟解除安装,真是太赞啦,再次谢谢 hua_wuxin 大大,辛苦了。  详情 回复 发表于 2023-4-11 15:56
回复

使用道具 举报

7#
发表于 2023-4-11 11:14:08 | 只看该作者
感谢楼主
回复

使用道具 举报

6#
发表于 2023-4-11 08:51:18 | 只看该作者
感谢楼主
回复

使用道具 举报

5#
 楼主| 发表于 2023-4-11 08:50:46 | 只看该作者
chishingchan 发表于 2023-4-11 07:17
我制作 Inno Setup 过程中一般不需要 Code 代码段!

如果只是简单制作个安装程式,确实不需要。
不过如果要自定义一些页面跟按钮的位置等等的话。
可能就有需要了,不过代码部份感觉有点难学。
只能多多参考一些前辈的教学范例。

点评

各有喜好!我的安装程序只显示 安装位置 唯一的页面  发表于 2023-4-11 09:36
回复

使用道具 举报

4#
 楼主| 发表于 2023-4-11 08:44:18 | 只看该作者
hua_wuxin 发表于 2023-4-11 03:50
// 常规写法版:
function InitializeSetup: Boolean;
var

非常感谢 hua_wuxin 大大的指导,受惠良多。
感觉  Inno setup 的代码部份 Pascal 脚本有点难学。
好像都要定义很多东西,还要有逻辑流程的概念,
没学过 Pascal 好像很难入门,哈!
有空再多看看网络范例教学学习学习。

点评

哈哈过奖了,我也是借机挑战了一下自己,第一次尝试去严格还原一段反编译出来的Pascal Script代码,其实是花了不少时间才搞出来的。 确实如3楼所说“一般不需要 Code 代码段”,本贴中这个INITIALIZESETUP代码段  详情 回复 发表于 2023-4-11 14:30
回复

使用道具 举报

3#
发表于 2023-4-11 07:17:54 | 只看该作者
我制作 Inno Setup 过程中一般不需要 Code 代码段!

点评

如果只是简单制作个安装程式,确实不需要。 不过如果要自定义一些页面跟按钮的位置等等的话。 可能就有需要了,不过代码部份感觉有点难学。 只能多多参考一些前辈的教学范例。  详情 回复 发表于 2023-4-11 08:50
回复

使用道具 举报

2#
发表于 2023-4-11 03:50:40 | 只看该作者
本帖最后由 hua_wuxin 于 2023-4-11 05:07 编辑

// 常规写法版:
function InitializeSetup: Boolean;
var
  v1_SetupAlreadyRunning, v2_SetupRunningInSystemTempDir: Boolean;
  v3_DialogResult: Integer;
  v11_SetupSourceDir, v16_SystemTempDir: string;
begin
  repeat
    v3_DialogResult := IDCANCEL;
   
    v1_SetupAlreadyRunning := CheckForMutexes('passolo_wise');
   
    if v1_SetupAlreadyRunning then
      v3_DialogResult := MsgBox('安裝程式已經執行!', mbError, MB_RETRYCANCEL);
  until v3_DialogResult <> IDRETRY;
  
  v11_SetupSourceDir := UpperCase(GetShortName(ExpandConstant('{src}')));
  v16_SystemTempDir := UpperCase(GetShortName(ExpandConstant('{%tmp}')));
  
  v2_SetupRunningInSystemTempDir := Pos(v16_SystemTempDir, v11_SetupSourceDir) > 0;
   
  if v2_SetupRunningInSystemTempDir then
  begin
    MsgBox('警告……', mbInformation, MB_OK);
    Result := False;
  end
  else
  begin
    CreateMutex('passolo_wise'); //这个是有问题的,应该尽早无条件创建
    Result := not v1_SetupAlreadyRunning;
  end;
end;

// 严格贴近版:
function InitializeSetup: Boolean;
var
  v1_SetupNotAlreadyRunning, v2_SetupNotRunningInSystemTempDir: Boolean;
  v3_DialogResult: Integer;
  v11_SetupSourceDir, v16_SystemTempDir: string;
begin
  repeat
    v3_DialogResult := IDCANCEL;

    v1_SetupNotAlreadyRunning := not CheckForMutexes('passolo_wise');

    if not v1_SetupNotAlreadyRunning then
      v3_DialogResult := MsgBox('安裝程式已經執行!', mbError, MB_RETRYCANCEL);
  until not (v3_DialogResult = IDRETRY);

  v11_SetupSourceDir := UpperCase(GetShortName(ExpandConstant('{src}')));
  v16_SystemTempDir := UpperCase(GetShortName(ExpandConstant('{%tmp}')));

  v2_SetupNotRunningInSystemTempDir := not (Pos(v16_SystemTempDir, v11_SetupSourceDir) <> 0);

  if not v2_SetupNotRunningInSystemTempDir then
    MsgBox('警告……', mbInformation, MB_OK);

  if v2_SetupNotRunningInSystemTempDir then
    CreateMutex('passolo_wise');

  Result := v1_SetupNotAlreadyRunning and v2_SetupNotRunningInSystemTempDir;
end;




点评

非常感谢 hua_wuxin 大大的指导,受惠良多。 感觉 Inno setup 的代码部份 Pascal 脚本有点难学。 好像都要定义很多东西,还要有逻辑流程的概念, 没学过 Pascal 好像很难入门,哈! 有空再多看看网络范例教学学  详情 回复 发表于 2023-4-11 08:44

评分

参与人数 1无忧币 +5 收起 理由
hsm570911 + 5 赞一个!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-8-7 06:55

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表