处理应用程序更新时connectionstring的位置

时间:2012-12-07 15:08:17

标签: c# wix windows-installer connection-string

我正在开发的一个应用程序正在被各种客户使用。应用程序需要连接到数据库,因此在app.config中定义了一个连接字符串。但是每个客户端都需要不同的连接字符串

客户端必须在安装产品期间提供数据库信息。每个新版本都需要提供此信息。

我真正想要的是某些设置(如连接字符串)存储在不受新安装影响的位置。处理这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

您是否考虑过为每个客户创建转换(http://wix.tramontana.co.hu/tutorial/transforms)?将连接字符串粘贴在属性中,并使用转换在客户端上更新它,它比更新安装程序以使用它们在安装期间输入的内容(并且可能更不容易出错)更快/更容易。操作简单:

  

installer.msi transforms = client.mst

缺点是他们必须确保他们在运行安装程序时使用转换,现在确定如何打包这些东西或启动它们等等。如果这是你给任何老汤姆,迪克或哈利这样的东西可能不是最好的解决方案,如果是你或你知道安装它的人,那么这可能是一个简单的解决方案。

或者,您可以在机器上使用DSN或其他设置来保持一致。

否则你必须修改/编辑你的安装,在这种情况下你应该看看http://wix.tramontana.co.hu/tutorial/user-interface-revisited

答案 1 :(得分:0)

我建议将连接字符串存储在注册表中,您可以在通过搜索值进行升级时检索并将值存储为属性。如果未找到该值,则可以将其视为干净安装并提示输入值,或将其作为命令行属性检索。

可以使用RegistrySearch进行搜索,这是一个例子:

<Property Id="DATABASECONNECTIONSTRING">
  <RegistrySearch Id="DbConnectionString" Root="HKLM" Key="MyDBConnectionStringLocation" Name="ConnectionString" Type="raw" />
</Property>

要存储值,请使用RegsitryValue元素:

<Component Id="PersistentProperty" KeyPath="yes">
  <RegistryValue Id="DbConnectionString" Root="HKLM" Key="MyDBConnectionStringLocation" Value="[DATABASECONNECTIONSTRING]" Name="DbConnectionString" Type="string" />
</Component>