Red de conocimiento informático - Material del sitio web - ¿Cómo implementar el inicio a través de servicios en C#?

¿Cómo implementar el inicio a través de servicios en C#?

Muchos cargadores de arranque simplemente se agregan a los elementos de inicio y en realidad no se inician hasta que inicia sesión. Esto se hace para resolver el problema de que algunos servidores se reinician automáticamente y luego cierto software se inicia automáticamente.

1. Cree un nuevo elemento visual C#----windows----windows

2. Agregue un conjunto de datos (.xsd) para el inicio del almacenamiento. el objetivo, la ruta del registro, etc.

En el editor visual del conjunto de datos, agregue una tabla de datos que contenga dos columnas: StartAppPath y LogFilePath, que se utilizan para almacenar la ruta de destino y la ruta de registro respectivamente.

* Creo que la ventaja de usar dataset.xsd para almacenar parámetros de configuración es que puede ignorar el proceso específico de análisis xml y usar el archivo xml directamente.

¡El método ReadXml se proporciona en el conjunto de datos para leer el archivo xml y convertirlo en una tabla con datos en memoria para una fácil recuperación de datos! Asimismo, el método WriteXml se utiliza para almacenar un archivo en formato xml, que también requiere solo una oración.

3. El archivo program.cs sirve como entrada del programa y el código es el siguiente:

¿ver copia simple en el portapapeles?

usando System.ServiceProcess

usando System.Text

espacio de nombres WindowsServices_AutoStart

{

programa de clase estática

{

// /

/// El punto de entrada principal de la aplicación.

///

static void Main()

{

ServiceBase[] ServicesToRun

;

// Se pueden ejecutar varios servicios de usuario en el mismo proceso. Para agregar

// otro servicio a este proceso, cambie la siguiente línea a

// Crear otro objeto de servicio. Por ejemplo,

//

// ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()}

//

ServicesToRun = new ServiceBase[] { new WindowsServices_AutoStart() };

ServiceBase.Run(ServicesToRun);

}

// ServiceBase; Ejecutar(ServicesToRun).

}

}

}

Usar System.

espacio de nombres WindowsServices_AutoStart<. / p>

{

programa de clase estática

{

///

/// Aplicación principal punto de entrada.

///

static void Main()

{

ServiceBase[] ServicesToRun;

// Se pueden ejecutar varios servicios de usuario en el mismo proceso.

Para agregar

// otro servicio a este proceso, cambie la siguiente línea a

// Crear otro objeto de servicio. Por ejemplo,

//

// ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()};

//

ServicesToRun = new ServiceBase[] { new WindowsServices_AutoStart() };

ServiceBase.Run(ServicesToRun)() se ejecuta (ServicesToRun

}

);

}

}

}

El código del archivo principal 4.service.cs es el siguiente:

Usar sistema

Usar System.Collections.Generic

Usar System.ComponentModel

Usar System.IO

Usar System.Collections.Generic; .

Texto;

espacio de nombres WindowsServices_AutoStart

{

clase parcial pública WindowsServices_AutoStart: ServiceBase

{

pública WindowsServices_AutoStart( )

{

InitializeComponent();

}

cadena StartAppPath = ""; //@"F:\00. exe";

string LogFilePath = ""; // @"f:\WindowsService.txt";

anulación protegida void OnStart(string[] args)

{

cadena exePath = System.Threading.Thread.GetPath()Threading.Thread.GetDomain().BaseDirectory;

//

if ( !File.Exists(exePath + @"\ServiceAppPath.xml"))

{

dsAppPath ds = new dsAppPath();

objeto[] obj =nuevo objeto[2];

obj[0]="0";

obj[1]="0";

ds.Tables[ "dtAppPath"].Rows.Add(obj);

ds.Tables["dtAppPath"].WriteXml(exePath + @"\ServiceAppPath.xml");

return;

}

prueba

{

dsAppPath ds = new dsAppPath();

ds.Tables[ "dtAppPath"].ReadXml(exePath + @"\ServiceAppPath.xml");

DataTable dt = ds.Tables[" dtAppPath"];

StartAppPath = dt.Rows[ 0]["StartAppPath"].ToString();

LogFilePath = dt.Rows[0]["LogFilePath"].ToString()

}

<; p> capturar {retorno;}

if (File.Exists(StartAppPath))

{

intentar

{

Proceso proc = new Process();

proc .StartInfo.FileName = StartAppPath // Presta atención a la ruta

//proc.StartInfo.Arguments = " ";

proc.Start();

}

captura (System. Exception ex)

{

/ /MessageBox.Show(this, "No puedo encontrar la ruta al

Archivo lp. ¿Se ha modificado o eliminado el archivo? \n" + ex.Mensaje, "Preguntar", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

FileStream fs = new FileStream(LogFilePath, FileMode.OpenOrCreate, FileAccess. Write);

StreamWriter m_streamWriter = new StreamWriter(fs);

m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);

m_streamWriter.WriteLine( "WindowsService: Cerrar();

}

}

anulación protegida void OnStop()

{<

try

{

// TODO: agregue código aquí para realizar el apagado requerido para detener el servicio

FileStream fs = new FileStream( LogFilePath, FileMode .OpenOrCreate, FileAccess.Write);

StreamWriter m_streamWriter = new StreamWriter(fs);

m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);

m_streamWriter.WriteLine("WindowsService: Servicio detenido " + DateTime.Now.ToString() + "\n");

m_streamWriter.Flush();

m_streamWriter .Close( );

fs.p> captura

{

}

}

}

}

5. Inicie la depuración y aparecerá un cuadro de diálogo después del éxito, lo que aproximadamente significa que el servicio debe instalarse

6. .exe programa ejecutable, instalado como un servicio del sistema Windows, existen muchos métodos de instalación en Internet. Permítanme hablar sobre uno de uso común:

Servicio de instalación

Ingrese el directorio donde se encuentra el archivo ejecutable compilado en el proyecto.

Ejecute InstallUtil.exe desde la línea de comando, pasando la salida del proyecto como parámetro. Ingrese el siguiente código en la línea de comando:

installutil yourproject.exe

Desinstale el servicio

Ejecute InstallUtil.exe.

installutil /u yourproject.exe

En este punto, todo el servicio ha sido escrito, compilado e instalado, y puede ver el servicio que escribió en la sección Servicios del Control. Herramienta de gestión de paneles.

7. Después de instalar la lista de servicios del sistema, puede administrar el servicio. En este momento, preste atención a la marca "Permitir interacción en el escritorio" en la ventana de propiedades del servicio ---- Iniciar sesión. ---- ¡"Permitir interacción en el escritorio"! De esta manera, después de iniciar el programa de destino, no querrás que simplemente permanezca en el proceso. También será visible en el escritorio.

8. Respecto a la desinstalación de un servicio, actualmente existen dos conceptos: uno es deshabilitarlo y el otro es eliminar completamente el servicio. Lo primero se puede hacer directamente a través de la ventana de gestión de servicios.

Para esto último, debe ingresar al registro "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" para encontrar la carpeta con el nombre del servicio, eliminarla por completo y, después de reiniciar la computadora, el servicio desaparecerá.

9. Pensamiento ampliado: después de modificar el código, también puede darse cuenta: antes de iniciar el programa de destino, detecte si el programa de destino existe en el proceso y no lo inicie nuevamente cuando el programa de destino exista. /p>

.