Inno setup 如何在安装过程中显示本地化程序文件名(显示名称)?

Inno setup 如何在安装过程中显示本地化程序文件名(显示名称)?,inno-setup,Inno Setup,我目前正在创建一个安装程序,它的默认安装目录是程序文件。为此,我使用了{pf} 这是一个德语程序,仅在德国使用,虽然在选择目标目录时安装程序完全使用德语,但安装程序仍然显示C:\program Files,而不是本地化名称C:\program 是否可以将其改为显示C:\Program?功能上一切正常,应用程序安装在C:\program中。我只是担心基本用户在阅读C:\Program Files时可能会感到困惑 编辑:进一步信息:我知道C:\Program或程序文件的任何其他本地化名称只是一个显示

我目前正在创建一个安装程序,它的默认安装目录是
程序文件
。为此,我使用了
{pf}

这是一个德语程序,仅在德国使用,虽然在选择目标目录时安装程序完全使用德语,但安装程序仍然显示
C:\program Files
,而不是本地化名称
C:\program

是否可以将其改为显示
C:\Program
?功能上一切正常,应用程序安装在
C:\program
中。我只是担心基本用户在阅读
C:\Program Files
时可能会感到困惑

编辑:进一步信息:我知道
C:\Program
程序文件的任何其他本地化名称
只是一个显示名称,物理路径始终是
程序文件
。不管Windows的版本或语言是什么。但我仍然希望安装程序在安装过程中显示
C:\program


我的测试机器在Windows 7和Windows 10上。

Inno安装程序不支持这一点

你得假装一下。您可以根据需要将
DirEdit
的内容动态转换为显示名称或从显示名称转换为显示名称:

  • 激活“选择目的地位置”页面时,转换为显示名称
  • 单击“浏览”按钮时,转换为物理路径
  • 选择新路径时,转换为显示名称
  • 单击“下一步”按钮时,转换为物理路径
函数ToDisplayName(路径:string):string;
开始
结果:=???;
结束;
函数FromDisplayName(路径:string):string;
开始
结果:=???;
结束;
变量
DirBrowseButtonClickOrig:TNotifyEvent;
OnSelectDir:布尔;
程序DirBrowseButtonClick(发送方:TObject);
开始
WizardForm.DirEdit.Text:=FromDisplayName(WizardForm.DirEdit.Text);
DirBrowseButtonClickOrig(发送方);
WizardForm.DirEdit.Text:=ToDisplayName(WizardForm.DirEdit.Text);
结束;
过程初始化Wizard();
开始
DirBrowseButtonClickOrig:=WizardForm.DirBrowseButton.OnClick;
WizardForm.DirBrowseButton.OnClick:=@DirBrowseButtonClick;
OnSelectDir:=False;
结束;
过程CurPageChanged(CurPageID:Integer);
开始
如果CurPageID=wpSelectDir,则
开始
OnSelectDir:=真;
WizardForm.DirEdit.Text:=ToDisplayName(WizardForm.DirEdit.Text);
结束
其他的
开始
如果是OnSelectDir,那么
开始
OnSelectDir:=False;
WizardForm.DirEdit.Text:=FromDisplayName(WizardForm.DirEdit.Text);
结束;
结束;
结束;
当然,一个棘手的部分是
ToDisplayName
fromsplayname
函数的实现

一个真正的本机实现将非常复杂,如果您可以使用Pascal脚本的有限特性(特别是缺少指针)来实现它,这甚至是值得怀疑的

但是,对于您的特定需求,您可以使用一些琐碎的东西,例如:

[自定义消息]
程序文件本地化=程序
[守则]
函数ToDisplayName(路径:string):string;
开始
StringChange(路径,'\Program Files','\'+CustomMessage('ProgramFilesLocalized');
结果:=路径;
结束;
函数FromDisplayName(路径:string):string;
开始
StringChange(路径“\”+CustomMessage(“ProgramFilesLocalized”),“\ProgramFiles”);
结果:=路径;
结束;



如果您需要一个真正的实现来转换到/显示名称,请考虑问一个单独的问题。这是一个很大的解决办法。我必须考虑这是否值得。这个解决方案的主要问题是它是硬编码的,这意味着我必须根据使用的语言创建和维护服务器安装例程。虽然它目前只在德国使用,但该程序可能会在其他国家使用,因此我需要为每种语言安装不同的安装程序,这不是我想要的。不过,非常感谢您对这个问题的深入了解。正如我所写的,可以使用WinAPI实现

ToDisplayName
FromDisplayName
,使其成为通用的,并且可以在任何语言上工作。但这是一个巨大的任务,值得一个新的问题+即使不是,您也不需要为每种语言安装不同的安装程序。您可以使用,就像安装程序中的任何其他自定义消息一样(您可能已经有了一些)。