Строка Wix с символами, недоступными в кодовой странице базы данных, хотя кодовая страница установлена
У меня есть проект установщика Wix в VS2012, который прекрасно скомпилирован в прошлый раз, когда я его использовал (около недели назад). Я вернулся сегодня и получил около 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 и получаю ту же проблему.
Есть идеи?
2 ответа
Если вы используете файлы.wxl, они могут переопределить кодовую страницу во время сборки. Убедитесь, что все ваши файлы.wxl имеют правильную кодовую страницу, установленную для добавляемых символов, и что вы не должны смешивать символы из разных кодовых страниц с вашим продуктом и строками, локализованными из файла.wxl.
Кроме того, поскольку вы используете WixUI, они содержат много файлов.wxl с кодовыми страницами в них. В WiX.chm есть тема под названием "Specifying Cultures to Build"
, Это показывает вам, как установить кодовые страницы для сборки в Votive. В частности, вы захотите добавить "ja-JP" (или другую соответствующую культуру) к Cultures to build:
установка Properties
вашего.wixproj. В противном случае вы, вероятно, получите культуру по умолчанию от WixUI, которая, вероятно, является en-US, и это объяснило бы обход 1252.
У меня была та же проблема, но с символом "è" (который включен в 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 "Указание культур для сборки". Это должна быть та же культура, что и в файле.wxl.
Сборка проекта в VS2010 сейчас работает.
РЕДАКТИРОВАТЬ: просто добавив <Product Codepage="1252"
в файл.wxs тоже решил проблему.