On our server (win 2008 r2) we enabled the setting "force network authentication" to enforce that the client must support the NLA, because the port 3389 is directly reachable from the internet. But on Windows XP SP3 the NLA seems to be disabled per default. As I wrote an installer with WIX to distribute the rdp files, I'd also like to install these two registry-entries (one is a comma separated list of type REG_SZ and one is a list of type REG_MULTI_SZ) as descriped in http://support.microsoft.com/kb/951608.
I've already tried it with RegistrySearch and RegistryValue, but I haven't succeded. The main difficulty is how I should handle these comma separated list of type REG_SZ.
Can anyone give me a hint开发者_StackOverflow中文版? Thanks in advance.
The standard way to solve this is by installing the hotfix using a bootstrapper mechanism, i.e. a separate "setup.exe" file that first installs the hotfix and then launches your WiX/MSI installer.
The Visual Studio bootstrapper provides such a mechanism. The packages that can be installed by this bootstrapper need to be described by an XML manifest called package.xml. This file needs to be located in a subfolder of C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages (Visual Studio 2008).
The following two pages describe how to author/create your own package manifest for KB951608:
Authoring a Custom Bootstrapper Package (article is for VS 2005, but basically should work with VS 2008 as well)
Add your own (custom) prerequisite to "ClickOnce" application
A generator for creating the manifest can be downloaded from MSDN:
Bootstrapper Manifest Generator
You can use this tool to create a simple manifest like this:
<?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>
Using a bootstrapper is unfortunately not directly supported by WiX, but you can use a simple MSBuild script to generate one (this requires Visual Studio to be installed though):
<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>
This script can be called as a post-build step:
%WINDIR%\Microsoft.NET\Framework\v3.5\msbuild.exe GenerateBootstrapper.msbuild
精彩评论