2012-01-30 19 views

Respuesta

9

Installutil es necesario, pero para facilitar las cosas, puede crear un proyecto de instalación, de modo que simplemente ejecute un .msi para instalar el servicio. (Esto utiliza installutil bajo el capó, pero simplifica enormemente la instalación.)

Un tutorial está aquí: http://support.microsoft.com/kb/816169

Y otro está aquí: http://msdn.microsoft.com/en-us/library/zt39148a(VS.80).aspx

La principal diferencia entre los dos es la cantidad de código en las muestras Ambos te guiarán por el mismo proceso.

Los artículos vinculados son antiguos, pero se siguen aplicando en VS2010. Usé el segundo artículo para recorrer el proceso de un servicio VS2010 la semana pasada.

+0

Gracias por el tutorial. También utilicé el segundo artículo con gran éxito. Sin embargo, dentro de mi servicio tengo una variable llamada filepath, que determina la ubicación de salida de los archivos que crea mi servicio. ¿De todos modos puedo hacer que el usuario pueda escribir la ubicación que quiere? – Simon

+0

o debería buscar sintall a través de un archivo .bat? – Simon

+1

Puede hacerlo si los valores están en el archivo .config. Aquí hay un tutorial que muestra cómo modificar los valores de app.config en un escenario de instalación del proyecto de instalación. No lo he usado, pero parece asombroso. http://raquila.com/software/configure-app-config-application-settings-during-msi-install/ – David

4

¿Por qué quieres evitar installutils?

Usted podría tratar de usar el comando sc, como en sc create ...

EDIT: Aquí hay una página de MSDN para ello: http://support.microsoft.com/?kbid=251192

DESCRIPTION: 
     Creates a service entry in the registry and Service Database. 
USAGE: 
     sc <server> create [service name] [binPath= ] <option1> <option2>... 

OPTIONS: 
NOTE: The option name includes the equal sign. 
     A space is required between the equal sign and the value. 
type= <own|share|interact|kernel|filesys|rec> 
     (default = own) 
start= <boot|system|auto|demand|disabled|delayed-auto> 
     (default = demand) 
error= <normal|severe|critical|ignore> 
     (default = normal) 
binPath= <BinaryPathName> 
group= <LoadOrderGroup> 
tag= <yes|no> 
depend= <Dependencies(separated by/(forward slash))> 
obj= <AccountName|ObjectName> 
     (default = LocalSystem) 
DisplayName= <display name> 
password= <password> 
+0

Esa es una buena idea. Me había olvidado de eso. Lo usé en mi primer servicio antes de descubrir cómo demandar a los archivos MSI. Esto le permite hacer cosas que no puede hacer con InstallUtil, como establecer el nombre de usuario y la contraseña predeterminados para que se ejecute el servicio. +1. – David

+0

preste especial atención a [binPath =] tiene que haber un espacio entre el = y el inicio de su ruta. Esto me tiene muchas veces. – AndyM

2

Siempre se puede hacer con las entradas del registro.
Las claves se encuentran en HKLM\SYSTEM\CurrentControlSet\services

El nombre de clave que crea es el nombre incrustado del servicio en su controlador de servicio. Los siguientes valores son relevantes:

DisplayName = texto que se mostrará en el gestor de servicios

ImagePath = FQ Nombre de servicio ejecutable

Start (DWORD) = tipo de arranque (3 = arranque automático)

DelayedAutoStart (DWORD) = (1 = retardada)

WOW64 (DWORD) = (0 = aplicación de 64 bits, app 1 = 32 bits)

ErrorControl (DWORD) = 0

ObjectName = {usuario} que se ejecutan bajo (LocalSystem de cuenta del sistema)

Hay un montón de otros valores, pero que deben empezar.

Cuestiones relacionadas