2012-01-11 7 views
8

Tengo una aplicación VB6 que enlaza con varios terminales POS desde una máquina Windows 7 de 32 bits. Los terminales POS están asignados a la máquina con Windows 7 y puedo acceder a los terminales POS desde la máquina con Windows 7 desde Explorer o desde cmdline/shell.Aplicación VB6 en Windows 7 no puede acceder a las unidades asignadas

La aplicación se ha actualizado a ADO 2.8 y todos los demás controles y componentes para los que ya no tenía el código fuente se han vuelto a escribir. Después de algunos contratiempos molestos, obtuve la aplicación para recompilar en la computadora con Windows 7 sin errores.

Ahora vienen los problemas. ¡La aplicación VB6 no puede ver ni desplazarse a ninguna unidad asignada! He intentado cambiar la configuración de UAC; Configuré la aplicación para que se ejecute en modo Windows XP SP3; He intentado ejecutar como administrador. Ninguna de estas cosas (y muchas permutaciones de estas) funcionan.

¿Alguna sugerencia sobre cómo hacer esto?

+0

Como fijo que se ejecute en el modo de Windows XP SP3? ¿Qué sucede cuando * no * se ejecuta en ese modo? – Gabe

+0

Lo configura para que se ejecute en modo de compatibilidad y lo configura para usar Windows XP SP3 como modo de compatibilidad. Esto se hace haciendo clic derecho en el enlace y usando Propiedades. En la práctica, no hay diferencia cuando lo ejecuté usando este modo de compatibilidad. –

+1

¿Qué sucede cuando intenta navegar a una unidad asignada? ¿Qué tal un camino UNC? – Gabe

Respuesta

4

Creo que tiene problemas porque el mapeo de unidades casuales es por usuario, y en un sistema UAC Los usuarios del grupo de administradores tienen dos contextos separados (uno para cada token: SU & elevado).

Existe una asignación de unidad de nivel del sistema, que se realiza bajo el usuario del sistema (NT Authority \ System). Cuando mapea un disco bajo esta cuenta y lo mapea de forma persistente, todos los usuarios pueden ver y usar el mapeo (sujeto a los derechos de acceso habituales para los archivos allí).

La forma normal de hacerlo es a través de GPO de nivel de dominio (Objetos de directiva de grupo), lo que significa sobornar a sus jinetes de casilla locales si se encuentra en un entorno LAN administrado por la empresa.

Una forma de hacer esto en una máquina de grupo de trabajo es el mapeo de la letra como del sistema mediante el comando AT, desde un símbolo elevado comando:

at 8:53 am "net use m: \\MediaShare\MyLibrary 
    ThePW /user:MediaShare\TheUser /persistent:yes > nul" 

Allí el servidor remoto es MediaShare, theuser usuario, la contraseña ThePW, y las 8:53 AM son uno o dos minutos en el futuro para evitar programar esto accidentalmente para mañana.

¡Pero esto falla en Vista y más tarde debido al Aislamiento de la Sesión 0!

Entonces ... utilice la tercera alternativa en Run CMD.exe as Local System Account que es lo mismo mencionado por la respuesta de ForcePush a How to map a network drive to be used by a service.

Creo que eso es lo que buscas aquí.

+0

Gracias por su contribución. En este caso, las asignaciones de unidad se instituyeron inicialmente como asignaciones locales por el usuario que inició sesión. Supuse que eso podría estar causando el problema y luego la gente de soporte de red configuró al usuario para que configure las asignaciones que establecerá el GPO como sugiera o mediante el script de inicio de sesión. En cualquier caso, el resultado es el mismo.El usuario que ha iniciado sesión puede ver y navegar a las unidades mapeadas y tiene acceso a todos los archivos que utilizan el Explorador o a través de la línea de comandos. Sin embargo, la aplicación VB6 no puede "ver" o acceder a los recursos compartidos en tiempo de ejecución. –

+0

Generalmente, la secuencia de comandos de inicio de sesión solo establece asignaciones para el usuario no elevado que inicia sesión. Exactamente con qué credenciales se ejecuta el programa VB6? Ese mismo usuario? Un usuario elevado? Algún otro usuario? – Bob77

+0

La aplicación se ejecuta con las credenciales del usuario que ha iniciado sesión. Esto es todo lo que se requiere desde el punto de vista de la aplicación. –

8

Agregando esta configuración de registro resuelto el problema para mí: http://technet.microsoft.com/en-us/library/ee844140%28v=ws.10%29.aspx.

Para solucionar este problema, configure el valor de registro EnableLinkedConnections . Este valor permite que Windows Vista y Windows 7 a compartan las conexiones de red entre el token de acceso filtrado y el token de acceso de administrador completo para un miembro del grupo Administradores . Después de configurar este valor de registro, LSA comprueba si hay otro token de acceso asociado con la sesión del usuario actual si un recurso de red se asigna a un token de acceso. Si LSA determina que hay un token de acceso vinculado, agrega el recurso de red a la ubicación vinculada.Para configurar el valor EnableLinkedConnections registro

  1. Haga clic en Inicio, escriba regedit en el cuadro de programas y archivos de inicio, y continuación, presione ENTRAR.

  2. Busque y haga clic con el botón derecho en la subclave del registro HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System.

  3. Señalar a Nuevo, y luego hacer clic en Valor DWORD.

  4. Escriba EnableLinkedConnections, y luego presione ENTER.

  5. Haga clic con el botón derecho en EnableLinkedConnections, y luego haga clic en Modificar.

  6. En el cuadro Información del valor, escriba 1 y luego haga clic en Aceptar.

  7. Salga del Editor del registro y luego reinicie la computadora.

+0

Esto funcionó para mí, específicamente para Universal USB Installer http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3. –

0

no saben si alguna vez descubierto éste hacia fuera, pero para mí era el comando ChDir (incluso con el registro fijar arriba).

que tenía en mi código

ChDir "P:\Temp\VidCap\Cam1\" 'I almost never use ChDir Open "list.txt" For Output As #1

y todos los comandos del archivo incorporadas VB6 miré directamente a pesar de todas las operaciones, no hay errores, no hay nada. Lo resolví teniendo explícitamente la ruta, (en mi código estaba en una cadena pero podría tenerlo explícitamente):

dd = "P:\Temp\VidCap\Cam1\" Open dd & "list.txt" For Output As #1 funciona como esperaba.

esperanza esto ayuda

H

Cuestiones relacionadas