论坛风格切换切换到宽版
  • 2157阅读
  • 2回复

请教老虎版主如何修正这个脚本 [复制链接]

上一主题 下一主题
离线546242502
 

发帖
332
金钱
-3060
威望
-306
只看楼主 倒序阅读 0 发表于: 2015-08-16
自己修正了一些错误,但是还是报错?实在不知道在哪修正了……



代码:
  1. ; Script generated by the Inno Setup Script Wizard.
  2. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
  3. ; 使用预定义变量,便于维护
  4. #define MyAppName "My Program"
  5. #define MyAppVerName "My Program 1.5"
  6. #define MyAppPublisher "My Company, Inc."
  7. #define MyAppURL "http://www.example.com/"
  8. #define MyAppExeName "MyProg.exe"
  9. [Setup]
  10. AppName={#MyAppName}
  11. AppVerName={#MyAppVerName}
  12. AppPublisher={#MyAppPublisher}
  13. AppPublisherURL={#MyAppURL}
  14. AppSupportURL={#MyAppURL}
  15. AppUpdatesURL={#MyAppURL}
  16. DefaultDirName={pf}\{#MyAppName}
  17. DefaultGroupName={#MyAppName}
  18. AllowNoIcons=yes
  19. LicenseFile=readme.txt
  20. OutputBaseFilename=setup
  21. Compression=lzma
  22. SolidCompression=true
  23. [Languages]
  24. Name: chinese; MessagesFile: compiler:default.isl
  25. [CustomMessages]
  26. ; 使用自定义信息,便于维护或多国语言
  27. cmSelectUser=Install for:
  28. cmAllUsers=&All users
  29. cmCurrentUserOnly=Current &user only
  30. cmlaunchProgram=Launch Program
  31. [Tasks]
  32. Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}
  33. Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}
  34. ; 把“选择安装给谁”选项作为附加任务来处理
  35. ; 脚本函数 ShowSelectUserTask 用于判断是否需要显示“选择安装”选项,比如 98 下不显示该选择,细节参见相应脚本函数
  36. Name: forallusers; Description: {cm:cmAllUsers}; GroupDescription: {cm:cmSelectUser}; Flags: exclusive; Check: ShowSelectUserTask
  37. Name: forcurrentuser; Description: {cm:cmCurrentUserOnly}; GroupDescription: {cm:cmSelectUser}; Flags: exclusive unchecked; Check: ShowSelectUserTask
  38. [Files]
  39. Source: MyProg.exe; DestDir: {app}; Flags: ignoreversion
  40. Source: Readme.txt; DestDir: {app}; Flags: ignoreversion
  41. ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
  42. [Dirs]
  43. ; “选择安装给谁”选项的应用示例,脚本函数 CheckInstallFor 用于判断是选择了 安装给所有用户 还是 安装给当前用户,由此决定安装目标目录是 所有用户 还是 当前用户
  44. Name: {commonappdata}\{#MyAppName}\Data; Check: CheckInstallFor('forallusers')
  45. Name: {userappdata}\{#MyAppName}\Data; Check: CheckInstallFor('forcurrentuser')
  46. [Icons]
  47. Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
  48. Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
  49. ; “选择安装给谁”选项的应用示例,请参考[Dirs]示例注释
  50. Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon; Check: CheckInstallFor('forallusers')
  51. Name: {userdesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon; Check: CheckInstallFor('forcurrentuser')
  52. ; 注意,我在测试过程中,发现{commonappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}不起作用,因此快速启动快捷键只安装给当前用户
  53. Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon
  54. [Registry]
  55. ; “选择安装给谁”选项的应用示例,请参考[Dirs]示例注释
  56. ; 这两行是卸载时候删除相应注册表内容
  57. Root: HKLM; Subkey: Software\{#MyAppName}; Flags: uninsdeletekey dontcreatekey; ValueType: none; Check: CheckInstallFor('forallusers')
  58. Root: HKCU; Subkey: Software\{#MyAppName}; Flags: uninsdeletekey dontcreatekey; ValueType: none; Check: CheckInstallFor('forcurrentuser')
  59. ; 这两行是安装时候在注册表内留下相应键值,来标识安装过程中的“选择安装”选项
  60. Root: HKLM; Subkey: Software\{#MyAppName}; ValueType: string; ValueName: InstallFlag; ValueData: ForAllUser; Check: CheckInstallFor('forallusers')
  61. Root: HKCU; Subkey: Software\{#MyAppName}; ValueType: string; ValueName: InstallFlag; ValueData: ForCurrentUser; Check: CheckInstallFor('forcurrentuser')
  62. [UninstallDelete]
  63. Name: {app}\MyProg.exe; Type: files
  64. Name: {app}\license.txt; Type: files
  65. Name: {app}; Type: dirifempty
  66. ; “选择安装给谁”选项的应用示例,请参考[Dirs]示例注释
  67. Name: {commonappdata}\{#MyAppName}\Data; Type: dirifempty; Check: CheckInstallFor('forallusers')
  68. Name: {userappdata}\{#MyAppName}\Data; Type: dirifempty; Check: CheckInstallFor('forcurrentuser')
  69. [Run]
  70. Filename: {app}\{#MyAppExeName}; Description: 运行运用程序; Flags: nowait postinstall skipifsilent
  71. [Code]
  72. // 是否显示“选择安装给谁”选项,这里我认为显示的条件是:NT 平台,且为 Amdin 用户
  73. function ShowSelectUserTask: Boolean;
  74. begin
  75.    Result := UsingWinNT and IsAdminLoggedOn;
  76. end;
  77. // 判断“选择安装给谁”选项值
  78. function CheckInstallFor(Task: string): Boolean;
  79. begin
  80.    if UsingWinNT then
  81.    begin
  82. Result := IsTaskSelected(Task);
  83. if Result and (Task = 'forallusers') then
  84.    Result := ShowSelectUserTask;
  85.    end
  86.    else
  87. Result := Task = 'forallusers';
  88. end;
  89. // 安装向导页面改变事件
  90. procedure CurPageChanged(CurPageID: Integer);
  91. var
  92.    I: Integer;
  93.    WinVer: TWindowsVersion;
  94. begin
  95.    if (CurPageID = wpSelectTasks) then
  96.    begin // 当前页为 附加任务 选择页
  97. GetWindowsVersionEx(WinVer);
  98. if UsingWinNT and (not IsAdminLoggedOn or (WinVer.Major > 5)) then
  99. begin // NT 平台,且 不是 Admin 用户 或 是 Vista 系统
  100.    for I := 0 to WizardForm.TasksList.Items.Count - 1 do
  101.    begin
  102.       if WizardForm.TasksList.ItemCaption[i]=ExpandConstant('{cm:cmCurrentUserOnly}') then
  103.       WizardForm.TasksList.Checked[i]:= True; // 默认选择为 安装给当前用户
  104.    end;
  105. end;
  106.    end;
  107. end;
  108. // 安装步骤改变事件
  109. procedure CurStepChanged(CurStep: TSetupStep);
  110. var
  111.    S: string;
  112.    ResultCode: Integer;
  113. begin
  114.    if CurStep = ssInstall then
  115.    begin // 安装将要开始执行
  116. // 这里可以根据自己需要,执行特定代码。我这里只是显示一下选项值
  117. if IsTaskSelected('forallusers') then
  118.    MsgBox(ExpandConstant('{cm:cmSelectUser}') + ' ' + ExpandConstant('{cm:cmCurrentUserOnly}'), mbInformation, MB_OK)
  119. else
  120.    MsgBox(ExpandConstant('{cm:cmSelectUser}') + ' ' + ExpandConstant('{cm:cmAllUsers}'), mbInformation, MB_OK);
  121.    end;
  122. end;



离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2015-08-16
其实以前提醒过你了,用于计数的变量名称最好不要用 i 或者 I,因为 方括号里面的 i 或者 I 会被网页当作格式化命令,即斜体字格式。我估计你的代码是从某个页面上直接复制下来的,方括号和里面的 I 被吃掉了,因此你的代码里面也缺少这个方括号和里面的 I。

所以建议不要用 i 或者 I 来作为计数变量的名称,而是用 n,j 等,因为 [n] 或者 [j] 不会被网页页面作为格式化命令误解。



离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 2 发表于: 2015-08-16
回 1楼(gnatix) 的帖子
gnatix:其实以前提醒过你了,用于计数的变量名称最好不要用 i 或者 I,因为 方括号里面的 i 或者 I 会被网页当作格式化命令,即斜体字格式。我估计你的代码是从某个页面上直接复制下来的,方括号和 .. (2015-08-16 19:06)

老虎版主,可以了,原脚本可能是网页上复制下来的,我没注意