Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 19013|Respuesta: 0

[Fuente] C# solo permite ejecutar correctamente la escritura de una instancia de la aplicación

[Copiar enlace]
Publicado en 10/12/2016 14:35:34 | | |
Los programas en C# solo permiten que una instancia ejecute el código correcto
http://www.itsvse.com/thread-3391-1-1.html
(Fuente: Arquitecto)


¡El código de abajo también está equivocado! ¡Código correcto como lo anterior!


A veces necesitamos permitir que solo se ejecute una instancia de la aplicación y, cuando el proceso inicia, si detecta que una instancia de la aplicación está en ejecución, se detendrá automáticamente. Normalmente lo implementamos en la función principal mediante un mutex Mutex, que suele escribirse:

Cuando buscamos respuestas, a menudo entramos y salimos con prisas, ignorando las características y precauciones de Mutex. Después de una prueba sencilla, vale, hazlo y úsalo. En este punto, pasamos por alto un requisito importante:Convenciones de nombres mutex. El método de escritura anterior funciona sin problemas bajo un solo usuario; En multiusuario, cada usuario puede iniciar una instancia, por lo que no se puede garantizar una sola instancia.

Si necesitas usarlo en un servidor de terminales y solo permites una instancia, usa el siguiente método:


Aquí está la descripción de MSDN:


En servidores que ejecutan servicios de terminal, el mutex del sistema con nombre puede tener dos niveles de visibilidad. Si el nombre comienza con el prefijo "Global\", el mutex es visible en todas las sesiones del servidor de terminales. Si el nombre comienza con el prefijo "Local\", el mutex solo es visible en la sesión del servidor de terminal que lo creó. En este caso, cada otra sesión del servidor de terminal puede tener un mutex separado con el mismo nombre. Si creas un mutex con nombre sin especificar un prefijo, tomará el prefijo "Local\". En una sesión de servidor de terminales, dos mutexes con prefijos de nombre diferentes son mutex independientes, y los dos mutex son visibles para todos los procesos de la sesión del servidor de terminales. Es decir, los nombres prefijos "Global" y "Local" describen el rango del nombre mutex respecto a la sesión del servidor terminal, no al proceso.






Anterior:El registro de componentes para la interoperabilidad COM está desaparecido
Próximo:Los programas en C# solo permiten que una instancia ejecute el código correcto
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com