Inno设置:{userdocs}在使用[语言]部分时消失

时间:2015-06-26 19:45:56

标签: inno-setup

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

我的原始脚本(仅英文)工作正常,即使在日语版本的Windows 7上也是如此。当我在脚本中包含[语言]部分,可选择英语或日语时,应该写入的项目安静地跳过包含{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

如果我将[语言]部分注释掉,如此处所示,安装程序在Windows上工作正常,此时系统显示语言是"英语"或"日语"。

但是,如果我取消注释[Languages]部分,安装程序仍会在没有投诉的情况下运行完成,但不会为" Docpath"和" Regpath",并且它不会安装脚本名称的两个PDF文件。

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

两种情况下的区别在于[语言]部分是否已注释掉。操作系统的显示语言是否设置为英语或日语没有区别。

有没有人知道发生了什么?

1 个答案:

答案 0 :(得分:2)

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

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

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

  2. 安装应用程序的用户不一定是运行它的用户 - 有时安装程序运行的用户帐户不是认为他们正在安装它的用户的帐户。 / p>

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

    但是在这种特定情况下,由于您似乎正在安装文档,因此您不应该将其放在用户(或公共)文档文件夹中 - 您应该将其放在{app}中以及应用程序的其余文件。