虽然设置了代码页,但是Wix字符串中包含数据库代码页中没有的字符

时间:2013-04-10 01:04:38

标签: wix

我在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因为日文字符而不高兴。然而在产品声明中,我将Codepage设置为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安装项目中尝试过这个问题,并且遇到了同样的问题。

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

我遇到了同样的问题,但是使用了“è”字符(包含在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文件中写的相同文化。

enter image description here

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

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

答案 1 :(得分:4)

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

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