2010-12-06 38 views
0

J'écris un petit programme qui doit être utilisé comme plate-forme de distribution numérique pour un moteur de jeu spécifique..NET Le processus se bloque mais s'exécute correctement depuis l'explorateur

Ce moteur de jeu a des versions qui sont assez anciennes et cela semble causer quelques problèmes de compatibilité.

Exécuter un jeu particulier semble fonctionner correctement si je l'exécute directement à partir de l'explorateur (c'est-à-dire en cliquant sur l'exe) mais si je l'exécute en tant que processus depuis mon programme, il se bloque immédiatement.

Alors, quelle est la différence entre un processus dans .NET et juste l'exécuter à partir du shell?

Heres mon code actuel:

(. Pour mémoire cette version du moteur ne pas besoin DOSBox, de sorte que son non DOSBox qui merdait)

if (Status == "Ready") 
       { 
        System.Diagnostics.Process Proc = new System.Diagnostics.Process(); 
        if (NeedsDosBox) 
        { 
         Proc.StartInfo.FileName = String.Format("{0}\\dosbox.exe", Globals.AppDir); 
         Proc.StartInfo.Arguments = String.Format("{2}\\{0}\\{1}", GameId, Executable, Globals.Gamecache); 
        } 
        else 
        { 
         Proc.StartInfo.FileName = String.Format("{2}\\{0}\\{1}", GameId, Executable, Globals.Gamecache); 
        } 
        Proc.StartInfo.UseShellExecute = true; 
        Proc.EnableRaisingEvents = true; 
        Proc.Exited += new EventHandler(Proc_Exited); 
        Status = "In Game"; 
        Proc.Start(); 

       } 

Répondre

4

Je pense que le processus doit être exécuté à partir d'un répertoire de travail spécifique. Lorsque vous exécutez un fichier EXE en double-cliquant dessus dans Explorateur, le répertoire de travail est le répertoire contenant le fichier EXE. Lorsque vous générez un processus à partir d'un autre processus, je crois que son répertoire de travail sera hérité de votre processus si vous n'en spécifiez pas explicitement un autre. Il peut donc être à la recherche de ressources dans le répertoire de travail et échouer car il est exécuté avec le répertoire de travail de votre processus.

+0

+1 Bon point. Le répertoire de travail est probablement incorrect. – leppie

+0

Oui, ça a marché, j'ai pensé que ça pourrait être quelque chose comme ça. Merci – Steve