0x000006ba error si abre una cola existente en un servidor virtual

Seleccione idioma Seleccione idioma
Id. de artículo: 305794 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Síntomas

Si abre una cola existente en un servidor virtual, recibirá un error de
0x000006ba
.

Causa

Un recurso de clúster DLL se ejecuta en el contexto del nodo local. Sin embargo, si genera un nuevo proceso desde el recurso DLL, el nuevo proceso se ejecuta en el contexto del clúster. Mensaje Queue Server (también conocido como MSMQ) llamadas se realizan desde el nuevo proceso.

Solución

Para evitar este problema, siga estos pasos:
  1. Crear una DLL de recursos personalizado en Microsoft Visual Studio 6.0.
  2. Agregue el código siguiente al bucle do...while() en la llamada xxxOnlineThread() (detección de errores se quita el ejemplo de código):
    RESOURCE_STATUS      resourceStatus;
    DWORD                nStatus;
    STARTUPINFO         StartupInfo;
    PROCESS_INFORMATION Process;
    LPWSTR              pszNameOfPropInError;
    LPWSTR              pszExpandedDir = NULL;
    LPWSTR              pszExpandedCommand = NULL;
    
    // Create Process parameters
    LPVOID   Environment = NULL;
    HANDLE processToken;
    HANDLE currentProcess;
    HANDLE hEventLog;
    DWORD nStatus = ResUtilGetPropertiesToParameterBlock(
                   pResourceEntry->hkeyParameters,
                   GenAppResourcePrivateProperties,
                   reinterpret_cast<LPBYTE>( &pResourceEntry->props ),
                   TRUE, // CheckForRequiredProperties
                   &pszNameOfPropInError
                   );
    // Perform resource-specific initialization before starting the app.
    if ( pResourceEntry->props.nUseNetworkName ) {
    // Create the new environment with the simulated net name.
    
    LPVOID   Environment = NULL;
    Environment = ResUtilGetEnvironmentWithNetName(pResourceEntry->hResource);
    } 
    else {
    
    // get the current process token. If it fails, revert to using just the
    // system environment area
    currentProcess = GetCurrentProcess();
    OpenProcessToken(currentProcess, MAXIMUM_ALLOWED, &processToken);
    // Clone the current environment, picking up any changes that might have
    // been made after resmon started
    CreateEnvironmentBlock(&Environment, processToken, FALSE);
    // Expand the current directory parameter
    if (pResourceEntry->props.pszCurrentDirectory) {
    pszExpandedDir = xxxExpandEnvironmentStrings(pResourceEntry->props.pszCurrentDirectory);
    } 
    // Try to start the new process
    				CreateProcess(<Enter Executable Name Here>,
     NULL, NULL, NULL, FALSE,
    				CREATE_UNICODE_ENVIRONMENT,
     Environment, pszExpandedDir, &StartupInfo,
    				&Process);
Nota El "
xxx
" en la llamada de función (
pszExpandedDir = xxxExpandEnvironmentStrings(pResourceEntry->props.pszCurrentDirectory
) corresponde al nombre de la DLL de recursos.

Este código hace lo siguiente:
  • El código configura el bloque de entorno con la propiedad UseNetnameAsComputerName (
    ResUtilGetEnvironmentWithNetName(...)
    ).
  • El código guarda esta información en el bloque de entorno para el proceso (
    CreateEnvironmentBlock(...)
    ).
  • El código crea un nuevo proceso que se ejecuta en el contexto del servidor virtual (
    CreateProcess(...)
    ).

Realice las llamadas de MSMQ en este nuevo proceso.

Estado

Este comportamiento es por diseño.

Propiedades

Id. de artículo: 305794 - Última revisión: viernes, 23 de febrero de 2007 - Versión: 2.1
La información de este artículo se refiere a:
  • Microsoft Message Queue Server 2.0
Palabras clave: 
kbmt kbprb KB305794 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 305794

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com