sexta-feira, 22 de abril de 2011

Dica: Obtendo o endereço físico (path) de um Windows Service

Ao contrário do ASP.NET e de uma aplicação Windows Forms, as classes que acompanham um Windows Service em .NET não permitem obter diretamente o endereço físico do serviço executado. Isso porque está informação não é relativa à aplicação, mas ao instalador de serviços do próprio Windows. O código a seguir demonstra como obter este endereço através dos registros do Windows:

'Obtém o endereço físico (diretório) do serviço
'defaulDir representa um diretório padrão caso não seja possível
'obter a chave
'this.ServiceName é o nome do serviço

Private Function GetPhysicalPath(ByVal defaulDir As String) As String
Dim diretorio As String

'Obtém a chave de registro
Dim Key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SYSTEM\CurrentControlSet\Services\" + this.ServiceName, False)

diretorio = CStr(Key.GetValue("ImagePath", defaultDir))

'Remove diretórios de executáveis e debug, no caso de querer o path padrão
diretorio = Replace(diretorio, "\bin", "")
diretorio = Replace(diretorio, "\Debug", "")
'Retorna o diretório sem o arquivo executável
'Obtém a última barra do diretório e seleciona a string até este ponto
Dim UltBarra As Integer = diretorio.LastIndexOf("\")
Return diretorio.Substring(0, UltBarra + 1)
End Function

Caso o Windows Service esteja em C:\Projetos\WinService\bin\debug\WinService.exe, o retorno será C:\Projetos\WinService.

0 comentários: