Aplicacion .net testeada , en un equipo cn xp no se ejecuta ni lanza error :s
-
miércoles, 27 de junio de 2012 15:10
Buenas a to2!
Recurro a vuestra sabiduría puesto que me encuentro entre la espada y la pared... he desarrollado una aplicación en VS2010 c# cuya funcion es sincronizar una bd de sqlserver con una mysql , funciona correctamente , esta testeado y en las maquinas de mi empresa corre a la perfeccion en w7,vista y xp .
El problema llega cuando instalamos la aplicacion en el cliente, un xp sp3 con el framework y todo lo necesario al igual que en la maquina xp de nuestra empresa, realizamos la instalación de manera exitosa, y al ejecutar el .exe simplemente no hace nada, aparece un segundo el reloj de arena de windows cargando y vuelve la flecha, no se ve nada.
Tampoco genera ningun error, por lo que estoy muy perdido, que puede pasar en la máquina del cliente para que simplemente no llegue ni a lanzarse el .exe , teniendo en cuenta que la maquina del cliente cumple los mismos requisitos que nuestra maquina de la empresa....
Gracias , quedo en sus manos!
Todas las respuestas
-
miércoles, 27 de junio de 2012 15:19Moderador
¿No escribe ningún log desde su aplicación? Sería bueno ver en qué punto del ejecutable aparece el problema revisando hasta dónde se escribió el log.
Pero eso asumiendo que el ejecutable por lo menos se logra iniciar. Si usted tiene abierto el administrador de tareas en la pestaña de procesos, ¿logra usted ver que su ejecutable aparece ahí, al menos por un momento? Aún si no lo ve, sería bueno crear un segundo ejecutable que inicie el primero y lo monitoree para determinar exactamente si logra ser ejecutado y cuánto dura exactamente. Lo ideal sería un ejecutable en C++ que no dependa de .Net.
También recuerde que Windows puede tener en efecto políticas administrativas que impidan a las estaciones de trabajo lanzar ejecutables desconocidos. Esto suele hacercse a través de Active Directory.
Jose R. MCP
Code Samples -
miércoles, 27 de junio de 2012 15:26
Gracias por tu rapida respuesta webJose,
Por desgracia ya he comprobado eso y el proceso ni se carga. En mi maquina veo el proceso miaplicacion.exe en la del cliente no. Esta en una equipo que hace de servidor a otros 3, por lo tanto en cuanto a politicas administrativas , que deberia revisar?
-
miércoles, 27 de junio de 2012 16:24
He realizado una nueva prueba, he creado un nuevo proyecto windows form y lo unico que he hecho es añadir un label y generar el .exe , lo he subido a la maquina del cliente y pasa lo mismo ni se carga el proceso, ejecuta sale reloj de arena desaparece y ahi no pasa nada.... :s Tiene instalado sql server para la bd dl programa de gestion , es lo unico q puede haber cambiado alguna directiva no?
Gracias
-
miércoles, 27 de junio de 2012 16:24Moderador
hola
como comenta Jose has validado si el proceso aunque no se vea en pantalla no se esta ejecutando, o sea el proceso en el Task Manager no esta aun alli
en que accion es que realizas esta accion de sincronizacion ? imagino no es en el constructor del form o en el Load porque quizas si realiza una tarea pesada puede bloquear la visualizacion del form hasta que termine
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
miércoles, 27 de junio de 2012 16:54No para evitar que quede colgada la pantalla principal, la sincro va en un hilo aparte... de todas maneras he generado un .exe de una aplicacion de consola y tampoco lo ejecuta, este escribe por pantalla y ademas escribe un txt , y no hace ninguna de las dos. Ademas como comento antes, la aplicacion funciona correctamente en otras maquinas... No entiendo como puede estar pasando y q tampoco expulse ningun error... no tengo ninguna referencia simplemente no se ejecuta...
-
miércoles, 27 de junio de 2012 17:21Moderador
Si el ejecutable no corre podría pensar que hay una política de grupo denegando la ejecución del proceso. ¿Le ha consultado al administrador de red si existen políticas de grupo en acción que podrían estar evitando la ejecución de su aplicación o su aplicación de prueba? O tal vez antivirus.
Lo que sí le puedo decir es que no es normal que el proceso ni siquiera comience. Eso sí: El administrador de tareas usa un timer para actualizar la lista de aplicaciones. Por eso le digo que no es prueba suficiente no verlo en la lista de procesos porque puede estar pasando de que el proceso sí se inicia pero termina muy rápidamente. Por eso le dije que lo mejor sería un ejecutable en C++ capaz de activar y monitorear el proceso para saber de seguro si el proceso está al menos iniciando correctamente.
También sería bueno que compruebe si el comportamiento se da en todas las PC's de la red de su cliente.
Jose R. MCP
Code Samples -
miércoles, 27 de junio de 2012 17:41
De acuerdo , estoy pidiendo acceso a otro equipo de su red, y lo tendre en 2 o 3 horas, hasta entonces me gustaria poder crear el monitorizador en C++ , mi problema es que no toco C++ desde que realizé mis estudios, y a dis de hoy desarrollo todo en C# tanto windows forms como asp.net y php , pero nada de C++... podrian indicarme como hacerlo o alguna guia ?
Gracias por vuestra ayuda una vez más ;)
-
miércoles, 27 de junio de 2012 18:35Moderador
Lo más fácil sería un programa de consola que utilice CreateProcess() para iniciar el proceso. La llamada, si es exitosa, proveerá asas para el proceso y el hilo. Es cuestión de usar WaitForSingleObject() para esperar a que el proceso termine y luego usar GetExitCodeProcess() para determinar el valor de retorno del proceso una vez que ha finalizado.
- Inicie Visual Studio.
- Cree un nuevo proyecto de C++. Seleccione Win32 de la lista a la izquierda; luego Win32 project (o su equivalente en español).
- Digite un nombre de proyecto y presione OK.
- Saldrá un cuadro de diálogo. Altere las preferencias: Seleccione Win32 application (o su equivalente en español) y seleccione el check de Empty project (o su equivalente en español).
- Obtendrá un proyecto 100% vacío. Agregue un nuevo item: Un archivo .cpp. Agregue este código. No lo probé. Espero que esté correcto:
#include <iostream> #define _WIN32_WINNT _WIN32_WINNT_WINXP #include <Windows.h> void ShowHelp() { WCHAR szFileName[MAX_PATH]; GetModuleFileNameW(NULL, szFileName, _countof(szFileName)); std::wcout << L"Sintaxis: " << PathFindFileNameW(szFileName) << L" <archivo a ejecutar>" << std::endl << std::endl; } void ShowError(DWORD dwError) { LPWSTR szMessage = NULL; std::wcerr << L"Error 0x" << std::hex << dwError << L": "; if (!FormatMessageW( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS , dwError , 0 , &szMessage , 0 , NULL )) { //No pudimos extraer el mensaje de error. std::wcerr << L"(error desconocido)" << std::endl; } else { std::wcerr << szMessage; LocalFree(reinterpret_cast<LPVOID>(szMessage)); } } int wmain(int argc, LPCWSTR argv[]) { if (argc != 2) { ShowHelp(); return 1; } LPWSTR szExe = new (std::nothrow) WCHAR[wcslen(argv[1]) + 1]; if (!szExe) { std::wcerr << L"Insuficiente memoria para continuar." << std::endl; return 2; } wcscpy(szExe, argv[1]); std::wcout << L"Ejecutando el proceso " << szExe << L"..." << std::endl; STARTUPINFOW si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); si.wShowWindow = SW_SHOW; si.dwFlags = STARTF_USESSHOWWINDOW; PROCESS_INFORMATION pi; if (!CreateProcessW( NULL , szExe , NULL , NULL , FALSE , 0 , NULL , NULL , &si , &pi )) { //La llamada a CreateProcess() falló. ShowError(GetLastError()); delete[] szExe; return 3; } std::wcout << L"Proceso iniciado satisfactoriamente. Esperando a que termine..." << std::endl; delete szExe; CloseHandle(pi.hThread); WaitForSingleObject(pi.hProcess, INFINITE); std::wcout << L"El proceso ha terminado." << std::endl; std::wcout << L"El proceso ha devuelto el código de salida 0x" << std::hex << GetExitCodeProcess(pi.hProcess) << std::endl; CloseHandle(pi.hProcess); #ifdef DEBUG std::wcout << "Presione ENTER para terminar."; std::wcin.get(); #endif return 0; }
Para compilar ese código sin que dependa del Visual C++ Runtime 2010, hay que ir a las opciones del proyecto y seleccionar en Configuration (o Configuración) "Debug" o "Depuración" y en Platform o Plataforma "Win32". Luego en la lista de la izquierda navegar a Configuration Properties (Propiedades de Configuración), C/C++, Code Generation (Generación de código, supongo). A la derecha ubicar Runtme Library (Biblioteca de ejecución o similar) y seleccionar la opción /MTd.
Finalmente, repetir lo mismo para la configuración "Release", plataforma Win32, excepto que se selecciona la opción /MT (sin la "d").
Jose R. MCP
Code Samples- Editado webJoseMicrosoft Community Contributor, Moderator miércoles, 27 de junio de 2012 18:37

