在 Inno Setup 中提示用户要在快捷方式中使用的文件
Prompt user in Inno Setup for file to be used in Shortcut
在 Inno Setup 中我尝试创建这个快捷方式:
"C:\Program Files (x86)\MapInfo\Professional\MapInfow.exe" "{app}\DPImap.MBX"
它适用于静态文本,但是 MapInfow.exe
的位置可能会有所不同,所以我想向用户询问。
这就是我到目前为止所做的,但是没有按预期创建快捷方式
; Default value for silent installion
#define MapInfoDefault AddBackslash(GetEnv("ProgramFiles(x86)")) + "MapInfo\Professional\MapInfow.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;
或者实际上更好,使用自定义页面,而不是在无法控制的时刻弹出的对话框。
参见 。
即使您喜欢该对话框,也可以在您选择的特定 page/moment 上弹出它,将所选文件名缓存到全局变量中,并在 MapInfoExecutable
.[=17 中使用该变量=]
请注意,我已经从 '{#MapInfoDefault}'
中删除了 ExpandConstant
- 这是胡说八道。参见 。
在 Inno Setup 中我尝试创建这个快捷方式:
"C:\Program Files (x86)\MapInfo\Professional\MapInfow.exe" "{app}\DPImap.MBX"
它适用于静态文本,但是 MapInfow.exe
的位置可能会有所不同,所以我想向用户询问。
这就是我到目前为止所做的,但是没有按预期创建快捷方式
; Default value for silent installion
#define MapInfoDefault AddBackslash(GetEnv("ProgramFiles(x86)")) + "MapInfo\Professional\MapInfow.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;
或者实际上更好,使用自定义页面,而不是在无法控制的时刻弹出的对话框。
参见
即使您喜欢该对话框,也可以在您选择的特定 page/moment 上弹出它,将所选文件名缓存到全局变量中,并在 MapInfoExecutable
.[=17 中使用该变量=]
请注意,我已经从 '{#MapInfoDefault}'
中删除了 ExpandConstant
- 这是胡说八道。参见