Sql server 从注册表中获取SQL Server实例名称

Sql server 从注册表中获取SQL Server实例名称,sql-server,xml,wix,windows-installer,Sql Server,Xml,Wix,Windows Installer,我正在尝试从我的Windows安装程序创建一个数据库并运行一些SQL脚本,只要我硬编码服务器名称,这些脚本就可以正常工作。如果我试图从注册表中获取服务器名称,安装程序将失败。在本例中,我在64位操作系统上安装了32位SQL Server,因此我使用以下注册表项: <Property Id="SQL_SERVER_INSTANCE"> <RegistrySearch Id="rs_ServerInstance" Type="director

我正在尝试从我的Windows安装程序创建一个数据库并运行一些SQL脚本,只要我硬编码服务器名称,这些脚本就可以正常工作。如果我试图从注册表中获取服务器名称,安装程序将失败。在本例中,我在64位操作系统上安装了32位SQL Server,因此我使用以下注册表项:

<Property Id="SQL_SERVER_INSTANCE">
  <RegistrySearch Id="rs_ServerInstance"
                  Type="directory"
                  Root="HKLM"
                  Key="Software\Wow6432Node\Microsoft\Microsoft SQL Server\Instance Names\SQL"
                  Name="SQLEXPRESS" />
</Property>

然后将此属性插入数据库设置:

    <sql:SqlDatabase Id="NewSQLDB" Database="wix_test_DB" User="Users" Server="[SQL_SERVER_INSTANCE]"
                     CreateOnInstall="yes" DropOnUninstall="yes" ContinueOnError="no" >
      <sql:SqlScript ..."/>
    </sql:SqlDatabase>


实际上,
MSSQLSERVER
是默认的SQL实例,根据,它是一个保留关键字,不能在实例名称中使用,所以我想您要查找的是SQL实例,如果是,您可以在路径
HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server
中找到一个名为
InstalledInstances
的值,它包含实例名,如果使用该代码,注册表项将作为列表显示。
请记住,如果您有默认的命名实例或命名实例,则此路径有效,之后您应将
MSSQLSERVER
从列表中排除您可以使用以下命令获取服务器中的所有命名实例‍<代码>Powershell‍

(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server').InstalledInstances

我认为
SQLEXPRESS
不是SQL Server的实例名,它之所以存在是因为安装了Visual Studio等软件。默认实例名是
MSSQLSERVER
,请进一步检查;)。实例名称为
SQLEXPRESS
。我用这个名字创造了它。我认为我正在使用的注册表路径中列出的实例可能只供人使用。你发布的链接看起来很有希望,谢谢!