7

我在 VS2012 中有一个 Wix 安装程序项目,我上次使用它时编译得很好(大约一周前)。我今天回去发现大约 15 个代码页错误:

Error   6   A string was provided with characters that are not available in the specified database code page '1252'. Either change these characters to ones that exist in the database's code page, or update the database's code page by modifying one of the following attributes: Product/@Codepage, Module/@Codepage, Patch/@Codepage, PatchCreation/@Codepage, or WixLocalization/@Codepage.

其中第一个发生在以下行:

<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine"
         Manufacturer="(株)テイコク" />

而且我认为 wix 不高兴是因为日语字符。然而,在产品声明中,我将代码页设置为 932,这对于日语应该是正确的:

<Product Id="*" Codepage="932" Language="1041"
         Name="各務原市農地支援・畑地管理システムインストーラー" Version="1.1.0.0"
         Manufacturer="(株)テイコク" UpgradeCode="PUT-GUID-HERE">

我真的不明白错误是什么或如何解决它,特别是因为几天前它运行良好......

这是完整的 Wix 代码,以备不时之需:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:net="http://schemas.microsoft.com/wix/NetFxExtension">
  <Product Id="*" Codepage="932" Language="1041" Name="各務原市農地支援・畑地管理システムインストーラー" Version="1.1.0.0" Manufacturer="(株)テイコク" UpgradeCode="PUT-GUID-HERE">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Manufacturer="(株)テイコク" />

    <UIRef Id="WixUI_Minimal" />
    <UIRef Id="WixUI_ErrorProgressText" />

    <PropertyRef Id="NETFRAMEWORK40CLIENT" />
    <Condition Message="インストールするには.NETフレームワーク4.0が必要です。フレームワークをインストールしてからもう一度インストーラーを実行してください。">
      <![CDATA[Installed OR NETFRAMEWORK40CLIENT]]>
    </Condition>

    <MajorUpgrade DowngradeErrorMessage="もっと新しいバージョンが既にインストールされています。" />
    <MediaTemplate EmbedCab="yes" />

    <Feature Id="ProductFeature" Title="MapManagerInstaller" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
    </Feature>

    <Icon Id="MapManager.exe" SourceFile="MapManager.exe" />
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="各務原市農地支援・畑地管理システム" />
      </Directory>
      <Directory Id="DesktopFolder" Name="Desktop">
      </Directory>
      <Directory Id="ProgramMenuFolder" Name="Programs">
        <Directory Id ="ProgramMenuDir" Name="各務原市農地支援・畑地管理システム">
        </Directory>
      </Directory>
    </Directory>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <Component Id="MapManagerProgramFiles" Guid="*">
        <File Id="MapManagerExe" Name ="MapManager.exe">
          <Shortcut Id="MapManagerDesktopShortcut" Directory="DesktopFolder" Name="各務原市農地支援・畑地管理システム" WorkingDirectory="INSTALLFOLDER" Icon="MapManager.exe" IconIndex="0" Advertise="yes" />
          <Shortcut Id="MapManagerStartMenuShortcut" Directory="ProgramMenuDir" Name="各務原市農地支援・畑地管理システム" WorkingDirectory="INSTALLFOLDER" Icon="MapManager.exe" IconIndex="0" Advertise="yes" />
        </File>
        <File Id="AxInterop.SisLib" Name="AxInterop.SisLib.dll" />
        <File Id="Interop.SisLib" Name="Interop.SisLib.dll" />
        <File Id="ClassMap" Name="ClassMap.dll" />
        <File Id="SuidenManager" Name="SuidenManager.dll" />
        <File Id="HatachiManager" Name="HatachiManager.dll" />
        <File Id="MapManagerShared" Name="MapManagerShared.dll" />
        <RemoveFolder Id="INSTALLDIR" On="uninstall" />
      </Component>
      <Component Id="DesktopShortcut" Guid="*">
        <Shortcut Id="DesktopShortcut" Name="各務原市農地支援・畑地管理システム" Target="[INSTALLFOLDER]MapManager.exe" WorkingDirectory="INSTALLFOLDER" />
        <RemoveFolder Id="DesktopFolder" On ="uninstall" />
        <RegistryValue Root="HKCU" Key="Software\MapMax\各務原市農地支援・畑地管理システム" Type="string" Value="" KeyPath="yes" />
      </Component>
      <Component Id="ProgramMenuDir" Guid="*">
        <RemoveFolder Id="ProgramMenuDir" On ="uninstall" />
        <RegistryValue Root="HKCU" Key="Software\MapMax\各務原市農地支援・畑地管理システム" Type="string" Value="" KeyPath="yes" />
      </Component>
    </ComponentGroup>
  </Fragment>
</Wix>

更新:

用代码页 1252 中的字符替换每个日语字符都可以正常工作。似乎 Wix 忽略了代码页规范并使用默认的 1252 代替...

我也在一个新的 wix 设置项目中尝试过这个并且遇到了同样的问题。

有任何想法吗?

4

2 回答 2

13

我遇到了同样的问题,但是使用了“è”字符(包含在CP-1252中,因此默认文化应该可以工作)。用“e”补丁替换它,但这不是一个干净的解决方案。

真正起作用的是添加 .wxl 文件代码页

<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Codepage="utf-8" Culture="fr-ca" xmlns="http://schemas.microsoft.com/wix/2006/localization">
</WixLocalization>

也精确 1252 工作

<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Codepage="1252" Culture="fr-ca" xmlns="http://schemas.microsoft.com/wix/2006/localization">
</WixLocalization>

然后根据 Wix 文档“Specifying Cultures to Build”指定要构建的文化。它需要与 .wxl 文件中写入的文化相同。

在此处输入图像描述

在 VS2010 中构建项目现在可以工作了。

编辑:只需添加<Product Codepage="1252"到 .wxs 文件中也可以解决问题。

于 2014-01-08T18:33:58.320 回答
4

如果您使用 .wxl 文件,这些文件可以在构建期间覆盖代码页。确保您的 .wxl 文件都为其添加的字符设置了正确的代码页,并且您最终不会将来自不同代码页的字符与您的产品和从 .wxl 文件本地化的字符串混合。

此外,由于您使用的是 WixUI,它们还包含许多带有代码页的 .wxl 文件。在 WiX.chm 中有一个名为"Specifying Cultures to Build". 这向您展示了如何设置代码页以在 Votive 中构建。具体来说,您需要在 .wixproj的Cultures to build:设置中添加“ja-JP”(或其他适当的文化)。Properties否则,您可能会从可能是 en-US 的 WixUI 获得默认文化,这将解释 1252 解决方法。

于 2013-04-10T04:24:45.370 回答