windows - 使用 WIX 安装 Microsoft KB951608

标签 windows wix registry wix3

在我们的服务器 (win 2008 r2) 上,我们启用了“强制网络身份验证”设置以强制客户端必须支持 NLA,因为端口 3389 可以直接从互联网访问。但在 Windows XP SP3 上,NLA 似乎默认被禁用。当我使用 WIX 编写安装程序来分发 rdp 文件时,我还想安装这两个注册表项(一个是逗号分隔的 REG_SZ 类型列表,一个是 REG_MULTI_SZ 类型列表),如 http://support.microsoft.com/kb/951608 中所述。 .

我已经尝试过使用 RegistrySearch 和 RegistryValue,但没有成功。主要困难是我应该如何处理这些以逗号分隔的 REG_SZ 类型列表。

谁能给我一个提示?提前致谢。

最佳答案

解决此问题的标准方法是使用 Bootstrap 机制安装修补程序,即首先安装修补程序然后启动 WiX/MSI 安装程序的单独“setup.exe”文件。

Visual Studio Bootstrap 提供了这样一种机制。这个 Bootstrap 可以安装的包需要用一个名为 package.xml 的 XML list 来描述。此文件需要位于 C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages (Visual Studio 2008) 的子文件夹中。

以下两页介绍了如何为 KB951608 编写/创建您自己的程序包 list :

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

可以从 MSDN 下载用于创建 list 的生成器:

Bootstrapper Manifest Generator

您可以使用此工具创建一个简单的 list ,如下所示:

<?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 不直接支持使用 Bootstrap ,但您可以使用简单的 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

关于windows - 使用 WIX 安装 Microsoft KB951608,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2041474/

相关文章:

c - 如何读取子进程的输出?

c# - LINUX 到 Windows 错误的编码响应

r - 在 Windows 上的 RMarkdown 中执行 bash (Git-Bash)

wix - 如何从构建服务器设置版本和内部版本号并使用此版本更新程序集?

c# - 注册表 - NetworkList 配置文件 - 无法通过程序访问

c++ - 识别 Windows 中连接的驱动器

windows - 我想用 exiftool 更改文件名。至 “Result of adding time zone (+9) to CreateDate”

asp.net - 您使用什么方法将ASP.Net应用程序野外部署?

oracle - 未找到消息文件\ORANT\DBS\FMCUS.MSB Oracle Forms 6i

WiX MSI 在不启动的情况下安装 Windows 服务