在 Inno 设置中提示用户在快捷方式中使用文件



在Inno设置中,我尝试创建以下快捷方式:

"C:Program Files (x86)MapInfoProfessionalMapInfow.exe" "{app}DPImap.MBX"

它适用于静态文本,但是MapInfow.exe的位置可能会有所不同,因此我喜欢向用户询问它。

这就是我到目前为止所做的,但是快捷方式未按预期创建

; Default value for silent installion
#define MapInfoDefault AddBackslash(GetEnv("ProgramFiles(x86)")) + "MapInfoProfessionalMapInfow.exe"
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
[Icons]
Name: {group}DPImap; Filename: {code:MapInfoExecutable} {app}DPImap.mbx
Name: {userdesktop}DPImap; Filename: {code:MapInfoExecutable} {app}DPImap.mbx; Tasks: desktopicon
[Code]    
function MapInfoExecutable(Param: String): String;
var
FileName: string;
begin
FileName := '';
if GetOpenFileName('Locate your MapInfo Application', FileName, ExpandConstant('{pf32}'), 'Executable (*.exe)|*.exe', 'exe') then
Result := FileName
else
{ Return default #MapInfoDefault if user does not provide any file }
Result := ExpandConstant('{#MapInfoDefault}');
end;

如何提供正确的用户对话框?

它应该是:

[Icons]
Name: {group}DPImap; Filename: "{code:MapInfoExecutable}"; 
Parameters: """{app}DPImap.mbx"""

您还应该缓存选定的文件名,否则您至少会收到两次提示,甚至可能更多次。

var
FileName: string;
function MapInfoExecutable(Param: String): String;
begin
if FileName = '' then
begin
if not GetOpenFileName(
'Locate your MapInfo Application', FileName, ExpandConstant('{pf32}'),
'Executable (*.exe)|*.exe', 'exe') then
begin
{ Return default #MapInfoDefault if user does not provide any file }
FileName := '{#MapInfoDefault}';
end;
end;
Result := FileName;
end;

或者实际上更好的是,使用自定义页面,而不是在无法控制的时刻弹出的对话框。

有关外部文件位置,请参阅Inno设置提示。

即使您喜欢该对话框,也可以在您选择的特定页面/时刻弹出它,将选定的文件名缓存为全局变量并在MapInfoExecutable中使用该变量。


请注意,我已经从'{#MapInfoDefault}'中删除了ExpandConstant- 这是胡说八道。请参阅在 Inno 安装程序 Pascal 脚本中评估运行时的预处理器宏

最新更新