Inno Setup:使用 [Languages] 部分时 {userdocs} 消失

Inno Setup: {userdocs} disappears when [Languages] section is used

我有一个 Inno Setup 脚本,我已经成功使用了将近一年。我正在尝试包括对日语的语言支持,但我遇到了问题。

我的原始脚本(只有英文)工作得很好,即使在日文版的 Windows 7. 当我在我的脚本中包含一个 [Languages] 部分,可以选择英文或日文时,项目应该写入包含 {userdocs} 常量的注册表的内容被悄悄跳过。安装路径中包含 {userdocs} 的要安装的文件也被跳过,但 Inno-Setup 没有给出任何消息。

这是我的安装程序的一些相关代码:

Source: "C:\Users\Anon\Documents\Visual Studio 2010\Projects\Myprog\Release\Myprog.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\Microsoft Visual Studio 10.0\VC\redist\x86\Microsoft.VC100.MFC\mfc100.dll"; DestDir: "{app}";
Source: "C:\Program Files\Microsoft Visual Studio 10.0\VC\redist\x86\Microsoft.VC100.MFC\mfc100u.dll"; DestDir: "{app}";
Source: "C:\Program Files\Microsoft Visual Studio 10.0\VC\redist\x86\Microsoft.VC100.CRT\msvcr100.dll"; DestDir: "{app}";
Source: "C:\Program Files\Microsoft Visual Studio 10.0\VC\redist\x86\Microsoft.VC100.CRT\msvcp100.dll"; DestDir: "{app}";
Source: "Myprog.pdf"; DestDir: "{userdocs}\Myprog\Docs";
Source: "Myprog(Japanese).pdf"; DestDir: "{userdocs}\Myprog\Docs";
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

//[Languages]
//Name: "english"; MessagesFile: "compiler:Default.isl"
//Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"

Root: HKLM; Subkey: "Software\MyCompany\Myprog\V4"; ValueType: string; ValueName: "Docpath"; ValueData: "{userdocs}\Myprog\Docs"; Permissions : users-modify; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\MyCompany\Myprog\V4"; ValueType: string; ValueName: "Regpath"; ValueData: "{userdocs}\Myprog"; Permissions : users-modify; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\MyCompany\Myprog"; ValueType: string; ValueName: "Serial"; ValueData: "{userinfoserial}"; Permissions : users-read; Flags: uninsdeletekey

如果我将 [Languages] 部分注释掉,如下所示,当系统显示语言为 "English" 或 "Japanese" 时,安装程​​序可以在 Windows 上正常运行。

但是,如果我取消注释 [Languages] 部分,安装程序仍会毫无怨言地运行到完成,但不会为 "Docpath" 和 "Regpath" 创建注册表项,并且不会安装两个 PDF 文件脚本名称。

安装的程序也能正常工作,只是无法找到其文档或个性化数据,因为它依赖于这些注册表项来查找这些数据。

这两种情况唯一的区别是[Languages]部分是否被注释掉。操作系统的显示语言设置为英文还是日文都没有区别。

有人知道发生了什么事吗?

如果您要写信给 HKLM,那么您必须安装管理员。

不建议在管理员安装中访问 {user*},因为这是用户特定的位置并且:

  1. 只有一个用户安装该应用程序,而多个用户可以 运行 它,因此您不能依赖安装程序对每个用户执行的任何操作(您必须在应用程序——或者更好的是,只在应用程序中执行此操作)。

  2. 安装应用程序的用户不一定是 运行ning 它的用户 -- 有时安装程序 运行ning 的用户帐户不是自认为正在安装它的用户的帐户。

如果要安装公共数据,则应将其安装到 {common*} 路径而不是 {user*} 路径(请记住,这对应用程序来说是只读的) .如果你真的需要每个用户的数据,那么你应该在应用程序启动时安装它(从一些通用模板或内部默认)而不是在安装时。

但是在这种特定情况下,由于您似乎是在安装文档,所以无论如何都不应该将它放在用户的(或公共的)Documents 文件夹中——您应该将它放在 {app} 以及应用程序的其余文件。