2012-03-02 23 views
15

¿Hay alguna forma de iniciar una aplicación de escritorio desde una aplicación estilo Metro en Windows 8? Intento crear algunos accesos directos simples a las aplicaciones de escritorio para reemplazar los íconos del escritorio en la pantalla de inicio, que parecen fuera de lugar.Iniciar una aplicación de escritorio con una aplicación estilo Metro

Solo necesito algo súper simple, preferiblemente en C#, para abrir una aplicación tan pronto como la aplicación se carga. Estoy planeando hacer estos accesos directos para algunos juegos, photoshop, etc., no cualquier cosa que haya hecho yo mismo. También son sólo para uso personal, por lo que se pueden utilizar rutas directas a aplicaciones como "C:\Program Files (x86)\Steam\steamapps\common\Skyrim\TESV.exe"

+5

No puede iniciar aplicaciones de escritorio (u otros procesos en general) debido a la zona de pruebas. Lo mejor que puede hacer es "iniciar" un archivo o URI, de modo que se inicie el programa predeterminado asociado, que puede ser una aplicación de escritorio. –

+0

¿Cómo hago eso, entonces? – JacobTheDev

+1

"Iniciar" el URI, ¿quieres decir? Usas la clase 'Windows.System.Launcher' para eso, específicamente el método' LaunchUriAsync'. Fue dado en una de las respuestas a continuación. –

Respuesta

21

Si simplemente desea ejecutar una aplicación de escritorio como (bloc de notas, Wordpad, Internet Explorer, etc.) y luego ir a través Process Methods y ProcessStartInfo Class

try 
{ 
// Start the child process. 
    Process p = new Process(); 
    // Redirect the output stream of the child process. 
    p.StartInfo.UseShellExecute = false; 
    p.StartInfo.FileName = "C:\Path\To\App.exe"; 
    p.Start(); 
} 

// Exp 2

// Uses the ProcessStartInfo class to start new processes, 
// both in a minimized mode. 
void OpenWithStartInfo() 
{ 
    ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe"); 
    startInfo.WindowStyle = ProcessWindowStyle.Minimized; 

    Process.Start(startInfo); 

    startInfo.Arguments = "www.northwindtraders.com"; 

    Process.Start(startInfo); 
} 

En Windows 8 aplicación metro descubrí esto: How to Start a external Program from Metro App.

Todas las aplicaciones de estilo Metro funcionan en el entorno de caja de arena muy alta y no hay forma de iniciar directamente una aplicación externa .

Puede intentar usar Launcher class - Dependiendo de su necesidad, puede proporcionarle una solución factible.

Comprobar esto:
Can I use Windows.System.Launcher.LauncherDefaultProgram(Uri) to invoke another metro style app?

Ref:How to launch a Desktop app from within a Metro app?

metro IE es una aplicación especial. No puede invocar un ejecutable desde aplicaciones de estilo Metro.

Prueba esto - no he probar todavía, pero puede ser que le ayudará a ..

Launcher.LaunchFileAsync

// Path to the file in the app package to launch 
string exeFile = @"C:\Program Files (x86)\Steam\steamapps\common\Skyrim\TESV.exe"; 

var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(exeFile); 

if (file != null) 
{ 
    // Set the option to show the picker 
    var options = new Windows.System.LauncherOptions(); 
    options.DisplayApplicationPicker = true; 

    // Launch the retrieved file 
    bool success = await Windows.System.Launcher.LaunchFileAsync(file, options); 
    if (success) 
    { 
     // File launched 
    } 
    else 
    { 
     // File launch failed 
    } 
} 
+0

Gracias, voy a dar un golpe cuando llegue a casa del trabajo, y probablemente acepte su responde entonces Los iconos de legado feo en la pantalla de inicio me ponen nervioso, así que esto realmente ayuda. – JacobTheDev

+0

El primero parece lo que estoy buscando, pero sigo recibiendo un error en "Proceso". – JacobTheDev

+0

@Rev ¿Qué solución funcionó para usted? – jackjop

3

no han intentado realmente si funciona y no es realmente una hermosa solución, pero creo que las aplicaciones estilo Metro pueden lanzar un URI. A continuación, podría crear un programa de escritorio que esté registrado para un esquema de URI personalizado que luego haría el inicio real del programa.

1

Lo que puede hacer es alojar el servicio WCF externo en su computadora con una instalación separada y conéctese desde la aplicación de estilo metro usando localhost. Entonces puedes hacer prácticamente cualquier cosa, incluido Process.Start.

+0

¿Podría explicar esto más claramente, por favor? ¿Qué es un servicio WCF externo y qué quiere decir con "con instalación por separado"? –

+0

Windows Communication Foundation. Podrías comunicarte a través del servicio a la aplicación e invocar las cosas de esa manera. Si bien esta es una solución que recomiendo, no vale la pena leerla con el único propósito de resolver este problema. Toma la ruta hacky por ahora, ha. Pero deffo leer en WCF, gran plataforma. Lo uso principalmente para enviar datos a través de la web (RESTO/SOAP, etc.) –

12

Encontré una solución que es adecuada para mí. Acabo de hacer un archivo de texto vacío en mi aplicación y lo llamó launcher.yourappyouwanttostart y luego ejecutado con

Windows.System.Launcher.LaunchFileAsync("launcher.yourappyouwanttostart"); 

En la primera puesta en marcha se le pregunte por el assocation para este archivo y luego elegir el archivo ejecutable que desea ejecutar y a partir de ahora cada vez que ejecute este archivo, se iniciará su aplicación.

+0

jaja ... ¡bien hack! –

+2

Haha, oh wow. +1 Voy a tener que recordar esto para las aplicaciones de uso interno de LOB. –

0

amo cosas simples, por lo que mi solución fue usar esto:

Process.Start("explorer", "shell:AppsFolder\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe!App") 

Esto iniciará la "nueva" notas adhesivas que vienen con el aniversario de actualización a Windows 10, pero funciona con todos los demás "Metro" aplicaciones que probé Para encontrar el nombre de la aplicación de metro, desde Windows Explorer debe encontrarlo en shell: carpeta de aplicaciones usando la columna AppUserModelId.

Cuestiones relacionadas