Ejecuto explorer.exe y no hace lo que debiera...

Iniciado por NikNitro!, 23 Agosto 2014, 19:59 PM

0 Miembros y 1 Visitante están viendo este tema.

NikNitro!

Buenas gente. resulta que estoy haciendo un par de cosillas en mi pc para ponerlo a mi gusto y hay algo a lo que no le encuentro sentido...

Bueno, resulta que si yo hago un
taskkill -f -im "explorer.exe"
cierro el explorador. Si abro el administrador de tareas, abro ejecutar y escribo ahí "explorer.exe" me lo abre bien. Si en vez de eso le digo que escriba cmd y dentro de la consola escribo "explorer.exe" también me lo abre bien.

Ahora bien, si creo un programa de consola en c++ que tenga lo siguiente:
Código (cpp) [Seleccionar]

#include <stdlib.h>

int main(int argc)
{
system("explorer.exe");
system("cmd");
return 0;
}




Y lo ejecuto (desde la carpeta debug que genera el .exe) sin que esté corriendo el explorador, no me lo abre sino que me abre una ventana del explorador; pero no me muestra la barra de inicio...
Además si en la cmd que me abre escribo "explorer.exe" me hace exactamente lo mismo...

La única causa que se me ocurre es algo relacionado con permisos... Qué me contáis vosotros?

Saludos;)

Eleкtro

#1
Nitro, tio, ¿a ti te parece que este tema va en Windows? xD.

Al parecer es algo común (bueno, que yo sepa solo me ha pasado a mi y ahora a ti xD), hasta la fecha no he podido identificar la causa del problema (he preguntado en sitios muy conocidos, olvida toda esperanza que tangas) pero probando alternativas llegué a una solución, eso si, en .NET:

[APORTE] Reinicializar el escritorio de forma correcta en Windows 8.1 cuando...
( En el post verás un enlace y dentro está el exe compilado, por si te sirve como solución alternativa de terceros )

No te fijes en el p/invoking y quédate con la parte importante del source:

Citar
Código (vbnet) [Seleccionar]
   Dim Explorer As New Process With
   {
    .StartInfo = New ProcessStartInfo With
                 {
                  .FileName = Path.Combine(ExplorerDirectory, ExplorerFilename),
                  .WorkingDirectory = My.Application.Info.DirectoryPath,
                  .UseShellExecute = True,
                  .CreateNoWindow = True
                 }
   }

Yo también estuve probando a ejecutarlo como parámetro de la CMD, etc, nada de eso funciona, solo eso me funcionó.

No manejo C++ pero intuyo que para reproducirlo puedes probar a utilizar la función CreateProcess y/o ShellExecuteEx de la WinAPI:
CreateProcess + STARTUPINFO structure
ShellExecuteEx  

Saludos








NikNitro!

Jaja, dónde debiera ir sino? Tampoco se considera programación no? :P Mi pensamiento es que como parece ser un fallo de Windows...
Bueno voy a mirarme el code y a intentar portarlo a c++ (para entenderlo). No se si es necesario algo específico de .NET, pero puesto que uso Visual Studio supongo que no habrá problema ;)

Luego te comento. Muchas gracias ;)