作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个带有数据库的项目,我必须创建一个安装文件来运行另一台计算机。我尝试设置,但首先,我需要知道该计算机上是否已安装任何 SQL Server。我搜索了一些关于它的代码,我发现:
RegistryKey rk = Registry.LocalMachine.OpenSubKey("\\SOFTWARE\\Microsoft\\Microsoft SQL Server");
String[] instances = (String[])rk.GetValue("InstalledInstances");
但每次实例每次都等于 null。但是当我试着在电脑上看自己时,我是用手找到的。这段代码有什么问题?
RegistryKey rk = Registry.LocalMachine.OpenSubKey("\\SOFTWARE\\Microsoft\\Microsoft SQL Server");
String[] instances = (String[])rk.GetValue("InstalledInstances");
if (instances.Length > 0)
{
foreach (String element in instances)
{
if (element == "MSSQLSERVER")
{
DialogResult res = MessageBox.Show("are u sure to setup this file?", "UYARI", MessageBoxButtons.YesNo);
if (res == DialogResult.Yes)
{
string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\SQLEXPR.EXE";
Process p = new Process();
p.StartInfo.FileName = path;
p.StartInfo.Arguments = "/qb INSTANCENAME=\"SQLEXPRESS\" INSTALLSQLDIR=\"C:\\Program Files\\Microsoft SQL Server\" INSTALLSQLSHAREDDIR=\"C:\\Program Files\\Microsoft SQL Server\" INSTALLSQLDATADIR=\"C:\\Program Files\\Microsoft SQL Server\" ADDLOCAL=\"All\" SQLAUTOSTART=1 SQLBROWSERAUTOSTART=0 SQLBROWSERACCOUNT=\"NT AUTHORITY\\SYSTEM\" SQLACCOUNT=\"NT AUTHORITY\\SYSTEM\" SECURITYMODE=SQL SAPWD=\"\" SQLCOLLATION=\"SQL_Latin1_General_Cp1_CS_AS\" DISABLENETWORKPROTOCOLS=0 ERRORREPORTING=1 ENABLERANU=0";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.Start();
p.WaitForExit();
CreateDB();
}
else
{
this.Close();
}
}
}
}
最佳答案
您需要删除初始的\
:
Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server");
但是当从 32 位 .Net 可执行文件在我的 64 位机器上运行时,它实际上并不报告已安装的实例。那是因为它们只在注册表的 64 位 View 中。要从 .Net 4 下的 32 位进程到达那里,you can use this code :
var localMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
var rk = localMachine.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server");
var instances = (String[])rk.GetValue("InstalledInstances");
关于c# - InstalledInstances 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7139717/
我有一个带有数据库的项目,我必须创建一个安装文件来运行另一台计算机。我尝试设置,但首先,我需要知道该计算机上是否已安装任何 SQL Server。我搜索了一些关于它的代码,我发现: RegistryK
我是一名优秀的程序员,十分优秀!