加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

inno-setup – 从Inno Pascal设置DestDir?

发布时间:2020-12-15 09:31:33 所属栏目:大数据 来源:网络整理
导读:我想在不同的文件夹中安装文件,具体取决于用户是选择为所有用户安装还是仅为当前用户安装. 我添加了使用CreateInputOptionPage()来创建一个带有两个单选按钮的选项页面. 但是,我的安装程序现在散落着许多重复的行,比如这两个: Source: {#ProjectRootFolder}
我想在不同的文件夹中安装文件,具体取决于用户是选择为所有用户安装还是仅为当前用户安装.

我添加了使用CreateInputOptionPage()来创建一个带有两个单选按钮的选项页面.

但是,我的安装程序现在散落着许多重复的行,比如这两个:

Source: {#ProjectRootFolder}License.txt; DestDir: {userdocs}{#MyAppName}; Check: NOT IsAllUsers
Source: {#ProjectRootFolder}License.txt; DestDir: {commondocs}{#MyAppName}; Check:IsAllUsers

是否有更优雅的方式来做上述事情?例如,Pascal代码可以创建一个像#define这样的变量,所以我可以用它代替上面的{userdocs}和{commondocs}吗?

更多详情:

上面的IsAllUsers()函数调用此代码:

function IsAllUsers: Boolean;
begin
#ifdef UPDATE
  Result := AllUsersInRegistryIsTRUE;
#else
  Result := AllUsersOrCurrentUserPage.Values[1]; // wizard page second radio button
#endif
end;

和:

function AllUsersInRegistryIsTRUE: Boolean;  // True if preceding install was to all users' documents 
var
  AllUsersRegValue: AnsiString;
begin
  if RegQueryStringValue(HKEY_LOCAL_MACHINE,'SoftwareMyApp','AllUsers',AllUsersRegValue) then
    Result := (UpperCase(AllUsersRegValue) = 'YES')
  else
    Result := FALSE;
end;

解决方法

这样的西装会适合吗?

[Files]
Source: {#ProjectRootFolder}License.txt; DestDir: {code:GetDir}{#MyAppName};

...

[Code]
var
  OptionsPage: TInputOptionWizardPage;

procedure InitializeWizard;
begin
  OptionsPage := CreateInputOptionPage(wpUserInfo,'please select','the kind of installation','and continue..',True,False);
  OptionsPage.Add('All users');
  OptionsPage.Values[0] := True;
  OptionsPage.Add('This user');
end;

function GetDir(Dummy: string): string;
begin
  if OptionsPage.Values[0] then
    Result := ExpandConstant('{commondocs}')
  else
    Result := ExpandConstant('{userdocs}');
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读