小编Sco*_*ott的帖子

在不卸载/升级其他功能的情况下升级WIX功能树中的单个功能

我正在尝试使用WIX创建一个安装项目,这将允许我安装单个产品的多个功能.如何更新其中一个已安装的功能(独立于其他已安装的功能),而无需重新安装功能树中的其他功能?

例如,我希望能够拥有一个名为HelloWolrd的项目(返回HelloWolrd),其中(惊喜)打印出"Hello world!" 屏幕上.假设我有三个这样的hello world应用程序,Hello World 1,Hello World 2和Hello World 3.每个应用程序都会在屏幕上显示Hello World 1,2或3.我想要的是创建一个MSI,它默认安装所有这三个"功能",但也允许稍后单独升级每个功能.

这是我的解决方案布局:

Solution Explorer http://img12.imageshack.us/img12/5671/solutionexplorerm.jpg

我的WIX Product.wxs文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="ca484210-c719-4b2e-b960-45212d407c11" Name="HelloWorldInstaller" Language="1033" Version="1.0.0.0" Manufacturer="HelloWorldInstaller" UpgradeCode="68eeb8cb-9ef3-443c-870c-9b406129f7ff">
        <Package InstallerVersion="200" Compressed="yes" />

        <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

        <!-- Create Directory Structure -->
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLLOCATION" Name="Hello World" />
            </Directory>
            <Directory Id="DesktopFolder" Name="Desktop"/>
        </Directory>

        <DirectoryRef Id="INSTALLLOCATION">
            <Component Id="HelloWorld1" Guid="6D1D9D33-DA17-4db3-8132-C39F32200C3A">
                <RegistryKey Root="HKCU" Key="Software\HelloWorldInstaller\HelloWorld1\Install" Action="createAndRemoveOnUninstall">
                    <RegistryValue Name="DTSC" Value="1" Type="integer" KeyPath="yes" />
                </RegistryKey>

                <File Id="HelloWorld1.exe" …
Run Code Online (Sandbox Code Playgroud)

windows-installer wix wix3 setup-project feature-upgrade

8
推荐指数
1
解决办法
5320
查看次数

将配置文件的数量减少到尽可能少

对于我的大多数应用程序,我使用iBatis.Net进行数据库访问/建模,使用log4Net进行日志记录.在这样做时,我需要为每个项目提供许多*.config文件.例如,对于一个简单的应用程序,我需要有以下*.config文件:

  • app.config([AssemblyName].[Extention] .config)
  • [的AssemblyName] .SqlMap.config
  • [的AssemblyName] .log4Net.config
  • [的AssemblyName] .SqlMapProperties.config
  • providers.config

当这些应用程序从DEV到TEST到PRODUCTION环境时,这些文件中包含的设置会根据环境而变化.

当文件的数量得到由具有5-10个(含)以上每个项目配套可执行加剧,对基础设施团队的工作负载(那些做滚奏到不同的环境)变得相当高.我们也有很高的风险,其中一个配置文件被遗漏,或配置文件中的错误类型.

避免这些风险的最佳方法是什么?我应该将所有配置文件合并到一个文件中吗?(这可能与iBatis有关吗?)我知道,在VisualStudio 2010中,他们为这些配置文件引入了转换,允许开发人员为不同的环境设置所有设置,然后动态地(取决于构建启动)配置文件得到更新到正确的版本.(VS 2010 - 转型)

感谢您提供的任何帮助.

configuration log4net configuration-files ibatis.net visual-studio-2008

7
推荐指数
1
解决办法
387
查看次数

如何使用自定义msbuild任务读取注册表值?

我正在创建一个MSBuild任务,它将读取特定注册表项的注册表.如果我在控制台应用程序中编写相同的代码行(见下文),它将返回预期的结果,但是当它在MSBuild任务中时,它不返回任何内容.

Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
Run Code Online (Sandbox Code Playgroud)

Nothing如果键/值对不存在,我希望上面的代码返回,如果它存在,则返回值.我Nothing在MSBuild任务执行时得到了.是否有一些属性需要应用于MSBuild任务的Execute函数来告诉它需要读取注册表?

编辑:

以下是从MSBuild任务执行的操作:

Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
Run Code Online (Sandbox Code Playgroud)

我相信这是由我的Vista x64机器上的注册表重定向器在32位运行MSBuild引起的.是否有任何方法可以告诉自定义MSBuild任务(用VB .Net编写),HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\只有在没有任何内容的情况下查看然后查看HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\

谢谢,

斯科特蓝

registry msbuild msbuild-task

5
推荐指数
2
解决办法
3373
查看次数

Silverlight 2.0:在更改之前确定是否设置了依赖项属性

我在自定义控件上有一个依赖属性(Foreground),它继承自Control.当我加载控件时,我想查看用户是否已设置依赖项属性,或者在我为其设置值之前是否使用其默认值.这个问题有点复杂,这里是:

该控件位于用户添加到其项目中的自定义控件库中.当他们设置项目时,我可以让他们使用给定的x:key在app.xaml文件中添加一行,其中包含我在设置控件的默认值时读取的设置.但是,如果他们在代码或xaml中设置值,我不想使用此全局值设置值.以下是一些有助于想象我正在谈论的内容的案例:

  1. 用户从我的库中创建一个控件并将其放在他们的页面上.然后他们将前景设置为绿色.我希望该控件的前景值为绿色.

  2. 用户在app.xaml中添加一条特殊行,表示他们希望特定类型的所有控件都具有红色前景.我希望这种控件的前景值为红色.

  3. 用户在app.xaml中添加一条特殊行,表示他们希望特定类型的所有控件都具有红色前景.然后,他们将单个控件(在xaml中)的前景值设置为黄色.我希望那种类型的所有控件的前景值都是红色的,除了它们另外指定为黄色的那个.

加载控件时,我想读取依赖项属性以查看它们是否已设置值,或者它是否是样式中定义的默认值.如果它是默认值,我想从app.xaml文件中读取它们的特殊行,并将前景设置为该颜色.

user-controls controls dependency-properties silverlight-2.0 control-library

2
推荐指数
1
解决办法
1646
查看次数