Aufruf einen externen Programms macht Probleme

Thopeto

Erfahrenes Mitglied
Hi!

Ich habe zwei Anwendungen. Das Hauptprogramm und den Updater.

Wenn ich den Updater über das Hauptprogramm per ShellExecuteEx aufrufe, dann kann der Updater keine Verzeichnisse erstellen. Starte ich den Updater seperat vom Hauptprogramm, erstellt er die Verzeichnisse.

Hat vllt jmd solch ein Sympton gehabt? Oder fällt jmd dazu etwas ein? Ich arbeite im Program Files Verzeichnis von Windows Vista und denke auch, dass der Fehler nur auf Windows Vista vorkommt.

Ich rufe im Hauptprogramm den Updater so auf:
Code:
SHELLEXECUTEINFO shExecInfo;
  
      shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
      shExecInfo.fMask = SEE_MASK_FLAG_NO_UI | SEE_MASK_NOCLOSEPROCESS;
      shExecInfo.hwnd = NULL;
      shExecInfo.lpVerb = _T("runas");
      shExecInfo.lpFile = CPfad::GetAppPfad() + "Updater.exe";
      shExecInfo.lpParameters = NULL;
      shExecInfo.lpDirectory = NULL;
      shExecInfo.nShow = SW_SHOW;
      shExecInfo.hInstApp = NULL;
  
      ShellExecuteEx(&shExecInfo);
Gruß
Thorsten
 
Hi Thopeto,

versuchs mal mit

sei.lpParameters = "runasadmin";

Unter Vista kann man in bestimmten Verzeichnissen nur im Administratorenmodus Verzeichnisse erstellen..

Schöne Grüße,

Pit
 
danke für deine hilfe, aber leider hilft das auch nicht. Ich finde es einfach komisch, dass wenn ich das programm aus meinem hauptprogramm heraus aufrufe, er keine verzeichnisse erstellt, aber wenn ich den updater extra aufrufe, also nicht über das hauptprogramm, klappt das wunderbar. Hast du vllt noch mehr tipps? irgendwas? egal was...:(

ich verstehs einfach net...:suspekt:

gruß
Thorsten
 
Wo liegt denn der Updater, im selben Verzeichnis wie das Hauptprogramm? Vielleicht ist es ein Problem mit unterschiedlichen Arbeitsverzeichnissen.

Gruß
MCoder
 
Hallo,

versuche doch doch mal den Fehler genauer einzugrenzen. Der Updater wird ja eine entsprechende Funktion zum Verzeichnisanlegen haben. Vielleicht kannst du herausbekommen, was genau da schiefgeht.

Gruß
MCoder
 
Hi nochmal,

Um welchen Pfad handelt es sich, den du erzeugen möchtest?

Du versuchst wahrscheinlich mit CreateDirectory, den Pfad zu erzeugen.

Gebe dir doch in beiden Fällen (positiv wie negativ) den zu erstellenden Pfad sowie den Rückgabewert von GetlastError() in einer Messagebox aus und poste diese Infos hier noch mal rein.

Ein häufiger Fehler beim Verwenden von Pfaden ist auch der, dass Pfade mit Leerzeichen nicht in Anführungszeichen gesetzt werden.

Also folgender Aufruf wird in deinem Fall z.B. nicht funktionieren :

Updater.exe c:\Program Files\MyDir

Des muss man so schreiben :

Updater.exe "c:\Program Files\MyDir"


Bis dahin,

Pit
 
mmmhh

du hast mich da auf eine idee gebracht. Ich benute für meine Plugins SetCurrentDirectory(). Kann es sein, dass wenn ich den Updater aus dem Hauptprogramm starte, ich ihm vllt einen falschen Pfad mitgebe? Das der Updater eventuel im falschen Verzeichnis arbeitet?
nur so eine idee...

gruß
Thorsten
 
Hi,

also ohne die entsprechenden Codezeilen zu lesen kann man da nur raten.

Poste doch einfach mehr Code und Infos, dann können wir das sicherlich schnell abschließen ;-)

Pit
 
hi

pschilling, dein tipp war guuuuuttt. Es war der Fehler mit SetCurrentDirectory(). Der Updater bekam anscheinend vom Hauptprogramm den falschen Pfad mit. Jetzt klappt es. danke!

gruß
Thorsten
 
Zurück