我正在开发的一个应用程序正在被各种客户使用。应用程序需要连接到数据库,因此在app.config中定义了一个连接字符串。但是每个客户端都需要不同的连接字符串
客户端必须在安装产品期间提供数据库信息。每个新版本都需要提供此信息。
我真正想要的是某些设置(如连接字符串)存储在不受新安装影响的位置。处理这个问题的最佳方法是什么?
答案 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>