Seite 1 von 1

Programm-Start mit RunProgram funktioniert nicht immer

Verfasst: 18.03.2013 12:40
von OlderCoder
Hallo allerseits,

ich bin dabei, mir eine Alternative zum Windows-Startmenü zu programmieren, da ich damit nicht zufrieden bin.
Links/Programm-Files/Dateien über Drag&Drop in ein Fenster ziehen und dort anordnen und vorbereiten.
Ein Klick auf den Link im Fenster und das Programm startet über RunProgram.
Das funktioniert auch in vielen Fällen bisher schon ganz gut, aber leider nicht in allen.

a)
Bei Halo hab ich festgestellt, dass das Programm beim Start verschiedene Dateien braucht und diese, wenn von einem PureBasic-Programm gestartet, grundsätzlich nicht in seinem eigenen Ordner, sondern im Ordner sucht, in dem sich das PB-Programm befindet. Wie ich das lösen kann, weiß ich noch nicht.

b)
Es gibt Programme, die als Administrator gestartet werden müssen.
Aber der Tipp von Microsoft http://technet.microsoft.com/en-us/libr ... K_examples
mit dem Parameter " runas/user:<EigenerUsername>\administrator cmd" hat nicht mal bei einer normalen Verknüpfung funktioniert.

c)
Gefunden hab ich ansonsten bisher im folgenden aufgelistete Problem-Programme.
Mit den Beschreibungen, was ich versucht habe, hoffe ich, dass vielleicht daraus ein Hinweis zu erkennen ist, wo das Problem liegt. Allerdings ist es sehr verwirrend und nervend, dass die Ergebnisse nicht immer gleich sind.

c1)
Crazy Machines Neue Herausforderungen:
Fehler: "...funktioniert nicht mehr"

c2)
Crazy Machines 2 Demo:
Fehler: "...funktioniert nicht mehr"

In beiden Fällen versucht:
1) Start aus meinem Programm tut nicht
2) Link aus meinem Programm kopiert in das Windows-Explorer-Fenster tut nicht
3) Windows-Verknüpfung tut
4) Link aus der Verknüpfung kopiert in das Windows-Explorer-Fenster tut
5) Link aus meinem Programm kopiert in das Windows-Explorer-Fenster tut jetzt (!)
6) Start aus meinem Programm tut immer noch nicht
7) Link aus meinem Programm kopiert in das Windows-Explorer-Fenster tut jetzt sofort

Später andere Ergebnisse:
Bei Craziy Machines NH:
3) tut auch nicht mehr, 4) ebenfalls nicht mehr.

Später andere Ergebnisse:
Bei Craziy Machines 2 Demo:
2) tut auf Anhieb


c3)
Biathlon 2009 Demo:
Fehler: "could not read packfile"

Versucht:
1) Start aus meinem Programm tut nicht
2) Link aus meinem Programm kopiert in das Windows-Explorer-Fenster tut nicht
3) Windows-Verknüpfung tut
4) Link aus der Verknüpfung kopiert in das Windows-Explorer-Fenster tut nicht


c4)
Gothic 3:
Fehler: "Configfile missing. Can't open configfile, see zSpy log for more details"; danach "..funktioniert nicht mehr."
Das log hab ich nicht gefunden, sonst hätte ich dort nachgeschaut.

Versucht:
1) Start aus meinem Programm tut nicht
2) Windows-Verknüpfung tut
3) Link aus der Verknüpfung kopiert in das Windows-Explorer-Fenster tut nicht


c5)
MazLite 2:
Fehler: "Can't compile script"

Versucht:
1) Start aus meinem Programm tut nicht
2) Link aus meinem Programm kopiert in das Windows-Explorer-Fenster tut nicht
3) Windows-Verknüpfung tut
4) Link aus der Verknüpfung kopiert in das Windows-Explorer-Fenster tut nicht


Alle Links sind beim Anschauen Identisch.
Keine Parameterübergabe, keine Kompabilitäts-Einstellungen in der Verknüpfung.
Sicherheitshalber stichprobenartigern Test in PureBasic mit Bool() gemacht, ergibt ebenfalls Gleichheit.

Ich möchte, dass alle Verknüpfungen funktionieren, dass das Programm zuverlässig funktioniert, sonst macht das ganze für mich wenig Sinn.
So wie es aussieht, ist der Befehl RunProgram kein vollwertiger Ersatz zum Programme starten über den normalen Windows-Weg.
(Die alternative Methode über die Adresszeile im Windows-Explorer verhält sich ähnlich unzureichend wie PureBasic.)

Was kann ich tun?

System: Windows 7 64 Bit

Gruß
OlderCotder

Re: Programm-Start mit RunProgram funktioniert nicht immer

Verfasst: 18.03.2013 12:57
von RSBasic
OlderCoder hat geschrieben:Bei Halo hab ich festgestellt, dass das Programm beim Start verschiedene Dateien braucht und diese, wenn von einem PureBasic-Programm gestartet, grundsätzlich nicht in seinem eigenen Ordner, sondern im Ordner sucht, in dem sich das PB-Programm befindet. Wie ich das lösen kann, weiß ich noch nicht.
Könnte es sein, dass du den Parameter "Arbeitsverzeichnis$" vergessen hast? Ermittle den Zielpfad und übergebe es als Arbeitsverzeichnis mit, dann kann die eben aufgerufene Anwendung die eigenen Dateien finden.
OlderCoder hat geschrieben:Es gibt Programme, die als Administrator gestartet werden müssen.
Aber der Tipp von Microsoft http://technet.microsoft.com/en-us/libr ... K_examples
mit dem Parameter " runas/user:<EigenerUsername>\administrator cmd" hat nicht mal bei einer normalen Verknüpfung funktioniert.
Ermittle den Zielpfad und versuch es damit und nicht den Pfad zur Verknüpfung. Vielleicht liegt es daran. Oder es fehlen Anführungszeichen, falls im Pfad ein Leerzeichen vorhanden ist.

Re: Programm-Start mit RunProgram funktioniert nicht immer

Verfasst: 18.03.2013 13:23
von OlderCoder
Vielen Dank für Deine blitzschnelle Hilfe und den sehr nützlichen Tipp!!!

Exakt das war das Problem.
Ich hab jetzt zusätzlich als Arbeitsverzeichnis einfach denselben Pfad ohne die exe übergeben, und somit sind meine aufgelisteten Probleme a) und c1)-c5) Geschichte.
Daran hatte ich gar nicht gedacht.

Bleibt noch das Problem b) mit dem Starten als Administrator über den Befehl RunProgram.
Das ist wohl eher kein direktes PureBasic-Problem, da ich Parameter wie auch bei Windows-Verknüpfungen vermutlich direkt mit dem Programmpfad übergeben kann, auch wenn ich es noch nicht probiert habe.
Aber welche Paramter ich in diesem Fall genau übergeben soll, weiß ich nicht. Vielleicht hast Du dafür auch eine Lösung.
Edit: Ich hatte den zweiten Teil Deiner Antwort übersehen, sorry. Werde ich mal probieren!

Re: Programm-Start mit RunProgram funktioniert nicht immer

Verfasst: 18.03.2013 13:37
von ts-soft

Code: Alles auswählen

Procedure RunProgrammAsHomer(ProgramName$, Parameters$ = "", WorkingDirectory$ = "")
  Protected shExecInfo.SHELLEXECUTEINFO
  
  With shExecInfo
    \cbSize = SizeOf(SHELLEXECUTEINFO)
    \lpVerb = @"runas"
    \lpParameters = @Parameters$
    \lpFile = @ProgramName$
    \lpDirectory = @WorkingDirectory$
    \nShow = #SW_NORMAL
  EndWith
  
  ProcedureReturn ShellExecuteEx_(shExecInfo)
EndProcedure

RunProgrammAsHomer("notepad.exe") 

Re: Programm-Start mit RunProgram funktioniert nicht immer

Verfasst: 18.03.2013 13:48
von OlderCoder
Super, danke ts-soft!
Das funktioniert tatsächlich.
Jetzt sind alle Startprobleme erst mal beseitigt.
Bei Euch wird man wirklich geholfen :-)

Was bedeutet eigentlich das @? Möchte ich schon länger wissen, und in der PB-Hilfe hab ich bisher nichts dazu gefunden.


Toll in diesem Forum übrigens, dass der eigene Post nicht sofort losgeschickt wird, wenn inzwischen ein anderer Post eingegangen ist. Das funktioniert in den wenigsten Foren.

Re: Programm-Start mit RunProgram funktioniert nicht immer

Verfasst: 18.03.2013 13:51
von ts-soft
OlderCoder hat geschrieben:Das funktioniert tatsächlich.
Homer hat immer alle erforderlichen Rechte :mrgreen:
OlderCoder hat geschrieben:Was bedeutet eigentlich das @? Möchte ich schon länger wissen, und in der PB-Hilfe hab ich bisher nichts dazu gefunden.
Das @ gibt die Adresse einer Variable (oder eines Strings) wieder.

Gruß
Thomas

Re: Programm-Start mit RunProgram funktioniert nicht immer

Verfasst: 18.03.2013 13:53
von Kiffi
<OT>
RunProgrammAsChuckNorris() fände ich besser. <)
</OT>

Re: Programm-Start mit RunProgram funktioniert nicht immer

Verfasst: 18.03.2013 14:08
von OlderCoder
Es wird garantiert noch nötig sein, das eine oder andere Programm im Kompatibilitätsmodus zu starten.
Geht das auch über das Windows-API, und wenn ja wie?
(In der tollen Windows-API-Library von RSBasic hab ich bisher nichts dazu gefunden, wegen dem Admin vorher auch nicht.)

Re: Programm-Start mit RunProgram funktioniert nicht immer

Verfasst: 20.03.2013 12:24
von OlderCoder
Ich möchte nochmal nachhaken.
Weiß jemand, wie ich mit RunProgram ein Programm in einer Kompatibilitätsmodus-Einstellung starten kann?
Z.B. Windows XP SP3 o.ä.Ich hab bisher dazu nichts gefunden.