2013-03-23 60 views

回答

2

雖然這個問題最初是關於檢索SQL Server的安裝路徑,但我覺得它更多的是代碼翻譯問題(解決方案已經存在,只是沒有使用正確的語言)。

但後來我認爲原始代碼中的方法相當鈍。

Evan爲您提供了我認爲是現有解決方案的可行翻譯。但是,執行此特定任務可能更容易 - 假設您只需找到已連接到的實例的安裝路徑,並假設可以讀取註冊表的用戶也具有VIEW SERVER STATE權限 - 是要發佈從你的程序對the DMV sys.dm_os_loaded_modules這個簡單的查詢:

SELECT name 
    FROM sys.dm_os_loaded_modules 
    WHERE name LIKE '%sqlservr.exe'; 

這會給你這樣的事情:

C:\ Program Files文件\ Microsoft SQL Server的\ MSSQL11.SQL2012 \ MSSQL \ BINN \ SQLSERVR。 exe

您需要進行一些解析,具體取決於您要做什麼(例如,你想停止在MSSQL,或Binn?),但這比讀取註冊表或其他方法在那裏恕我直言,要容易得多。

1

我只是用一個編碼轉換器......有隻需要改變基本的東西..

Using sqlServerKey As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Microsoft SQL Server") 
    For Each subKeyName As String In sqlServerKey.GetSubKeyNames() 
     If subKeyName.StartsWith("MSSQL.") Then 
      Using instanceKey As RegistryKey = sqlServerKey.OpenSubKey(subKeyName) 
       Dim instanceName As String = instanceKey.GetValue("").ToString() 

       If instanceName = "MSSQLSERVER" Then 
        'say 
        Dim path__1 As String = instanceKey.OpenSubKey("Setup").GetValue("SQLBinRoot").ToString() 
        path__1 = Path.Combine(path__1, "sqlserver.exe") 
        Return path__1 
       End If 
      End Using 
     End If 
    Next 
End Using 

如果你只是讀C#快速的文章,你會發現這串聲明不同,和少量的語法差異存在諸如foreach VS for each

可以爲一些較常見的閱讀here差異。

1

我使用了一個非常好的(離線)工具,叫做Convert .NET Free

這是一個從www.fishcodelib.com

這裏有一個直接鏈接到最新版本(截至19/04/14)大小: 2。06MB,文件:郵編:

[Direct Link]

希望這是一些使用的;)

附:此軟件需要.NET Framework 4.5