我有一个Wix安装程序,他在安装过程中从用户设置的某些参数创建系统DSN(ODBCDataSource组件)。
<Component Id="ODBCDATASOURCE" Guid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" KeyPath="yes">
<ODBCDataSource Id="ODBCDATASOURCE" Name="DBconnection" Registration="machine" DriverName="PostgreSQL Unicode" >
<Property Id="Database" Value="[ODBCDATABASENAME]" />
<Property Id="Server" Value="[ODBCSERVERIP]" />
<Property Id="Username" Value="[ODBCUSER]" />
<Property Id="Port" Value="5432" />
<Property Id="Password" Value="[ODBCPASSWORD]" />
</ODBCDataSource>
</Component
我已将所有这些ODBCDataSource参数存储在注册表项中,以便在升级期间重用它们。
但是如果用户手动修改了ODBC配置(例如更改服务器IP地址),我的安装程序将不会在升级期间考虑此更改,因为它从注册表项中读取属性值。
我的安装程序是否有办法从现有的OdbcDataSource而不是注册表项中读取属性?
感谢您的帮助。
答案 0 :(得分:0)
最后,解决方案比预期更容易。 我只是从注册表中读取ODBC值:
<Property Id="ODBCSERVERIP" Secure="yes">
<RegistrySearch Id="SearchReg_ODBCSERVERIP" Type="raw" Root="HKLM" Key="Software\ODBC\ODBC.INI\DBconnection" Name="Servername" />
</Property>
<Property Id="ODBCDATABASENAME" Secure="yes">
<RegistrySearch Id="SearchReg_ODBCDATABASENAME" Type="raw" Root="HKLM" Key="Software\ODBC\ODBC.INI\DBconnection" Name="Database" />
</Property>
<Property Id="ODBCUSER" Secure="yes">
<RegistrySearch Id="SearchReg_ODBCUSER" Type="raw" Root="HKLM" Key="Software\ODBC\ODBC.INI\DBconnection" Name="Username" />
</Property>
<Property Id="ODBCPASSWORD" Secure="yes" Hidden="yes">
<RegistrySearch Id="SearchReg_ODBCPASSWORD" Type="raw" Root="HKLM" Key="Software\ODBC\ODBC.INI\DBconnection" Name="Password" />
</Property>
这也可以通过自定义操作(读取注册表并将值设置为属性)来完成,但这种方法对我来说已经足够了。