Visual Basic - Aplicación como servicio.

Life is soft - evento anual de software empresarial
 
Vista:

Aplicación como servicio.

Publicado por Roberto Moreu (1 intervención) el 22/11/2006 09:10:40
Hola gente del foro.

A ver quien me puede ayudar.

Tengo una aplicación creada que mediante NtService.Ocx se puede ejecutar
como un servicio de Windows ¿O.K.? Dicha aplicación trata de gestionar toda
una serie de archivos tanto locales como remotos, es decir, en otros
servidores de la red de la empresa.

Al ejecutar la aplicación con doble click el programa funciona correctamente
pero al ejecutarla en modo servicio no me localiza las carpetas de referencia. Para
localizar la carpeta hago servir un FileSystemObject de la siguiente manera:

Public Function Archivos(Optional mascara As String = "", Optional Tipo As
Integer = vbArchive) As String
Dim strStr As String, _
nombre As String
Dim fo As Folder
Dim aster As Integer, _
inte As Integer, _
punt As Integer
Select Case Tipo
Case vbDirectory
Set FsArxiu = CreateObject("Scripting.FileSystemObject")
If InStr(mascara, " ") <> 0 Then mascara = """" & mascara & """"
If FsArxiu.FolderExists(mascara) Then
ContadorArxius = 0
Set FsArxiu = CreateObject("Scripting.FileSystemObject")
strStr = Mid(mascara, 1, InStrRev(mascara, "\") - 1)
Set fo = FsArxiu.GetFolder(strStr)
ReDim Preserve Matriz(ContadorArxius) As String
For Each FiArxiu In fo.Files
Matriz(ContadorArxius) = FiArxiu.Name
ContadorArxius = ContadorArxius + 1
ReDim Preserve Matriz(ContadorArxius) As String
Next
Archivos = Matriz(0)
PosMatriz = 1
Set FsArxiu = Nothing
Else
Call msgLog("Archivos", "mascara ", mascara)
Archivos = ""
End If
Case vbArchive
If mascara = "" Then
If PosMatriz < ContadorArxius Then
PosMatriz = PosMatriz + 1
Archivos = Matriz(PosMatriz - 1)
Else
Archivos = ""
End If
Else
strStr = Mid(mascara, 1, InStrRev(mascara, "\") - 1)
If Len(strStr) < 3 Then
strStr = Mid(mascara, 1, InStrRev(mascara, "\"))
End If
nombre = Mid(mascara, InStrRev(mascara, "\") + 1)
aster = InStr(nombre, "*") ' - (Len(strStr) + 1)
punt = (Len(nombre) + 1) - InStr(nombre, ".")
inte = IIf(InStr(nombre, "?") < 0, 0, InStr(nombre, "?")) '
- (Len(strStr) + 1))
If inte <> 0 And aster <> 0 Then
Archivos = ""
Err.Raise vbObjectError + 513, "basGestioArxis.Archivos", _
"No se puede poner a la vez el carácter '?' y el carácter '*' en el nombre del archivo"
Else
Erase Matriz
ContadorArxius = 0
Set FsArxiu = CreateObject("Scripting.FileSystemObject")
Set fo = FsArxiu.GetFolder(strStr)
ReDim Preserve Matriz(ContadorArxius) As String
For Each FiArxiu In fo.Files
If aster > 0 Then
If UCase(Mid(FiArxiu.Name, 1, aster - 1) & "." &
Right(FiArxiu.Name, punt - 1)) = _
UCase(Mid(nombre, 1, aster - 1) & "." &
Right(nombre, punt - 1)) Then
Matriz(ContadorArxius) = FiArxiu.Name
ContadorArxius = ContadorArxius + 1
ReDim Preserve Matriz(ContadorArxius) As
String
End If
Else
If UCase(FiArxiu.Name) = UCase(nombre) Then
Matriz(ContadorArxius) = FiArxiu.Name
ContadorArxius = ContadorArxius + 1
ReDim Preserve Matriz(ContadorArxius) As
String
End If
End If
Next
Archivos = Matriz(0)
PosMatriz = 1
Set FsArxiu = Nothing
End If
End If
End Select
End Function

Esta rutina me permite ver si la carpeta existe o no y la lista de archivos
de la carpeta que le pase a la función.

El log que obtengo es que nunca me reconoce una carpeta alojada en otro
servidor si ejecuto el programa en modo servicio, pero si lo ejecuto en modo
exe si que me lo encuentra.

Además de la problematica de que el servicio debe activarse al iniciar el PC
y no la sesión.

¿Alguien podría ayudarme?

Gracias.

Roberto
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder