在我们的服务器上(win 2008 r2),我们启用了设置“强制网络身份验证”以强制客户端必须支持NLA,因为端口3389可以从Internet直接访问。但是在Windows XP SP3上,NLA似乎默认是禁用的。当我用WIX编写安装程序来分发rdp文件时,我还想安装这两个注册表项(一个是逗号分隔的类型REG_SZ列表,一个是类型REG_MULTI_SZ的列表),如{{3 }}。
我已经尝试使用RegistrySearch和RegistryValue,但我还没有成功。主要的困难是我应该如何处理这些逗号分隔的REG_SZ类型列表。
任何人都可以给我一个提示吗?提前谢谢。
答案 0 :(得分:1)
解决此问题的标准方法是使用引导程序机制安装此修补程序,即首先安装此修补程序然后启动WiX / MSI安装程序的单独“setup.exe”文件。
Visual Studio引导程序提供了这样的机制。可以由此引导程序安装的软件包需要由名为package.xml的XML清单描述。该文件需要位于C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bootstrapper \ Packages(Visual Studio 2008)的子文件夹中。
以下两页介绍了如何为KB951608创建/创建自己的包清单:
Authoring a Custom Bootstrapper Package(文章适用于VS 2005,但基本上也适用于VS 2008)
Add your own (custom) prerequisite to "ClickOnce" application
可以从MSDN下载用于创建清单的生成器:
您可以使用此工具创建一个简单的清单:
<?xml version="1.0" encoding="utf-8"?>
<Package Name="KB952155" Culture="en-US" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
<PackageFiles CopyAllPackageFiles="false">
<PackageFile Name="windowsxp-kb952155-x86-enu.exe" PublicKey="3082010A0282010100A2DB0A8DCFC2C1499BCDAA3A34AD23596BDB6CBE2122B794C8EAAEBFC6D526C232118BBCDA5D2CFB36561E152BAE8F0DDD14A36E284C7F163F41AC8D40B146880DD98194AD9706D05744765CEAF1FC0EE27F74A333CB74E5EFE361A17E03B745FFD53E12D5B0CA5E0DD07BF2B7130DFC606A2885758CB7ADBC85E817B490BEF516B6625DED11DF3AEE215B8BAF8073C345E3958977609BE7AD77C1378D33142F13DB62C9AE1AA94F9867ADD420393071E08D6746E2C61CF40D5074412FE805246A216B49B092C4B239C742A56D5C184AAB8FD78E833E780A47D8A4B28423C3E2F27B66B14A74BD26414B9C6114604E30C882F3D00B707CEE554D77D2085576810203010001" />
</PackageFiles>
<Commands Reboot="Defer">
<Command PackageFile="windowsxp-kb952155-x86-enu.exe">
<ExitCodes>
<DefaultExitCode Result="Fail" String="Anunexpectedexitcodewasr" FormatMessageFromSystem="true" />
</ExitCodes>
</Command>
</Commands>
<Strings>
<String Name="Culture">en</String>
<String Name="DisplayName">KB952155</String>
<String Name="Anunexpectedexitcodewasr">An unexpected exit code was returned from the installer. The installation failed.</String>
</Strings>
</Package>
遗憾的是,WiX并不直接支持使用引导程序,但您可以使用简单的MSBuild脚本生成一个(这需要安装Visual Studio):
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WindowsSDKPath>$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GenericBootstrapper\3.5@Path)</WindowsSDKPath>
</PropertyGroup>
<ItemGroup>
<BootstrapperFile Include="KB952155">
<ProductName>KB952155</ProductName>
</BootstrapperFile>
</ItemGroup>
<Target Name="Bootstrapper">
<GenerateBootstrapper ApplicationFile="mySetup.msi" Culture="en-US" ApplicationName="My RDP Setup" OutputPath="C:\myoutputfolder\en-US" BootstrapperItems="@(BootstrapperFile)" Path="$(WindowsSDKPath)" />
</Target>
</Project>
此脚本可以作为构建后步骤调用:
%WINDIR%\Microsoft.NET\Framework\v3.5\msbuild.exe GenerateBootstrapper.msbuild