miércoles, 7 de octubre de 2009

Aplicaciones autocontenidas en una llave USB


En la página portableapps nos explican como podemos llevarnos nuestros programas favoritos de un pc a otro. Para un usuario particular esto puede ser útil si por lo que sea tiene que usar varios pcs y no le interesa instalar todo el software que necesita en todos y cada uno de los pcs.
Para una empresa, las aplicaciones portables pueden tener otra dimensión. Le permite extender su sistema informático a otros empresas. Es decir, si por alguna funcionalidad de negocio hay que darle una aplicación a otra empresa, no se tendría que instalar el software en una máquina de esta segunda empresa. Se podría dar la aplicación en un USB con todo lo necesario para que funcione.

Se podría alegar que al entregar el software en un USB el cliente lo podría copiar al disco duro, a otro usb, etc, y de alguna manera romper la ventaja de tener un entorno autocontenido. Pues bien, con un simple script en Visual Basic se pueden hacer una serie de comprobaciones que aseguren que el código se está ejecutando en la llave USB correcta, por ejemplo, una unidad de nombre "XXXXX" y un determinado número de serie. Pego un código de ejemplo:

strComputer = "."


' Obtención de la letra de unidad


Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")


' Comprobación de S/N del fabricande del HW

' Cogemos el número del fichero
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
("configuracion.properties", ForReading)
strNextLine = objTextFile.Readline
arrServiceList = Split(strNextLine , ",")
SnFichero = arrServiceList(0)

' Hacemos la búsqueda entre los dispositivos físicos conectados al equipo
Set colDevices = objWMIService.ExecQuery _
("Select * From Win32_DiskDrive Where InterfaceType='USB' and PNPDeviceID like '%" & SnFichero & "%'")

if colDevices.count = 0 then ' No hemos encontrado el dispositivo
Wscript.Echo "El dispositivo de nombre XXXXX no está conectado."
else ' El dispositivo existe
Wscript.Echo "El dispositivo de nombre XXXXX está conectado."

' Comprobación de los datos de la unidad lógica asociada al pendrive
Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk where VolumeName='XXXXX'")
if colDisks.count = 0 then ' No hemos encontrado la unidad lógica
Wscript.Echo "Se ha modificado el nombre del dispositivo de XXXXX."
else ' La unidad lógica existe
For Each objDisk in colDisks
letraUnidad = objDisk.Name
Set colProcesses = objWMIService.ExecQuery( _
"select * from win32_process Where Name = 'Wscript.exe'" )
For Each objProcess in colProcesses
rutaEjecutable = objProcess.CommandLine
' Buscamos la letra de unidad en la ruta de ejecución del proceso
resultado = instr(rutaEjecutable,letraunidad & "\script\Def4.vbs")
' Wscript.Echo letraUnidad & " - " & rutaEjecutable
Wscript.Echo "Ruta de ejecución del script: " & rutaEjecutable & VbCr & "Letra de unidad XXXXX: " & letraunidad
if resultado <> 0 Then
Wscript.Echo "Se está ejecutando en el pendrive."
else Wscript.Echo "NO Se está ejecutando en el pendrive."
end if
Next
next
end if
end if

No hay comentarios:

Publicar un comentario