2

アセンブリを使用してローカライズされているレポートのリストがあります。これらのアセンブリは、Reporting Services のインストール パスに配置する必要があります。配置のタスクの 1 つは、これらのアセンブリを .Net (vb.net) から正しいパスにコピーすることです。

今のところ、アセンブリを (翻訳と共に) 追加するためにハード コード パスを使用しています。では、Vb.Net からサーバーで実行されている SQL レポート サービスのパスを取得する方法はありますか?

IE レポート サービスの有効なパスは次のとおりです。

C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin

私が期待するのは次のようなものです:

C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\

4

2 に答える 2

0

共有するためにコードを貼り付けます :) (コンソール VB.Net アプリケーション)

Private Const INSTANCES As String = "SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\RS"
Private PathToReplace As String = "SOFTWARE\Microsoft\Microsoft SQL Server\{textToReplace}\Setup"

Sub Main()

    'For now we must be sure we have only one instance of sql reporting service
    Dim reportingInstances As List(Of String) = GetSQLReportingServicesInstances()

    Dim InstanceName As String = GetKeyValue(INSTANCES, reportingInstances.Item(0))

    Dim registryPathOfSqlReportingServices As String = PathToReplace.Replace("{textToReplace}", InstanceName)

    Dim pathOfSqlReportingServices As String = GetKeyValue(registryPathOfSqlReportingServices, "SQLPath")

    Console.WriteLine(pathOfSqlReportingServices)

    Console.ReadLine()
End Sub


Public Function GetKeyValue(ByVal RegistryPath As String, ByVal key As String) As String

    Dim localMachine As RegistryKey = GetRegistryParentKey()

    Dim windowsNTKey As RegistryKey = localMachine.OpenSubKey(RegistryPath)

    Return windowsNTKey.GetValue(key).ToString()

End Function

Public Function GetSQLReportingServicesInstances() As List(Of String)

    Dim listOfInstances As New List(Of String)

    Dim localMachine As RegistryKey = GetRegistryParentKey()

    Dim InstancesKey As RegistryKey = localMachine.OpenSubKey(INSTANCES)

    For Each InstanceKey As String In InstancesKey.GetValueNames
        listOfInstances.Add(InstanceKey)
    Next

    Return listOfInstances

End Function


Public Function GetRegistryParentKey() As RegistryKey

    Dim localMachine As RegistryKey = Nothing

    If (Environment.Is64BitOperatingSystem) Then
        localMachine = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64)
    Else
        localMachine = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32)
    End If
    Return localMachine

End Function
于 2013-02-20T00:55:33.390 に答える
0

インスタンスの名前が一貫していると仮定して ( MSRS10_50.MSSQLSERVER)、次のSQLPathレジストリの場所でキーを確認します。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Setup

ここに画像の説明を入力

必要に応じてレジストリを読み取る方法については、この SO 投稿を参照してください。

于 2013-02-19T20:48:18.467 に答える