Inno setup and DefaultDirName

泄露秘密 提交于 2020-01-03 21:12:18

问题


Is there some way to set the DefaultDirName by code depending on some decission a user did on installtion?

Let me comment: I have some code which is build for two different systems (using different interops/ocx's and such stuff). My input files are stored in two directories input\A and input\B. I want to have only one setup-file for both systems.

In the setup file i use CreateInputOptionPage with 2 options to determin which files to install (using Check on each file). This works okay.

But i do also have some ShellExec on finish of setup, which at the moment uses {app} to e.g. register some .Net classes and ShellExec to unregister the .Net classes on InitializeUninstall (also uses {app})

The setup must install the software on two different locations (depending on the selection of the user (eg. c:\software_a or c:\software_b). Can't change this.

So is there some way to specify the DefaultDirName before the files get copied to the system, so i can use the same ShellExec on install and uninstall? I could of course add the same ShellExec for both systems on installtation and use an if to check which files to register (depending on the user selection) but on uninstall i would not have this information (user selection), so i can not unregister the .Net classes.

thanks


回答1:


If you need to change the install folder after the DefaultDirName has been initialized, this was working for me quite well:

procedure CurPageChanged(CurPageID: Integer);
begin
  { updates the install path depending on the install type or the entered suffix }
  if CurPageID = wpSelectDir then begin
     WizardForm.DirEdit.Text := ExpandConstant('{pf}') + '\MyAppName' + GetAppSuffix('');
  end;
end;

Cheers Chris




回答2:


In your CreateInputOptionPage code section, you might be able to set a value then use that value in the code snippet below. I haven't tested it but it might work.

[Setup]
DefaultDirName={code:getpath}

[Code]
function GetPath( Default: string ): string;
begin

if (CreateInputOptionPageValue1) then
 Result := ExpandConstant({sd}) + '\path1';
else
 Result := ExpandConstant({sd}) + '\path2';
end;


来源:https://stackoverflow.com/questions/4177307/inno-setup-and-defaultdirname

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!