PDA

Vollständige Version anzeigen : Externes Programm mit Angabe des Arbeitsverzeichnisses starten ???


AWSW
22.06.2001, 22:03
Hallo liebes Forum,
ich habe eben meine letzte Anwendung etwas ausgetestet und stoße beim Aufruf einer externen Anwendung mit folgendem Aufruf auf ein Problem:

Call Shell ("C:\TAP\TAP_UTI\TKNSUM\TKNSUM-S.EXE", 1)

Früher habe ich eine INI-Datei ausgelesen, in der das Arbeitsverzeichnis hinter dem EXE-Pfad stand, also so:

C:\TAP\TAP_UTI\TKNSUM\TKNSUM-S.EXE, C:\TAP\TAP_UTI\TKNSUM\

Damit hat es immer geklappt. Nun existiert auf vielen Systemen diese INI in Zukunft nicht mehr, und wenn ich nur die Call Shell - Anweisung nutze, dann werde ich anschließend mit "DLL nicht gefunden"-Meldungen bombadiert. Das kann nur daran liegen, dass das Arbeitsverzeichnis als Angabe fehlt... :(

Auch die Zurhilfename des Explorers in der Call Anweisung bringt es nicht...

Könnt Ihr mir sagen, wie ich die Call Shell Anweisung verbiegen muss, damit es klappt ??? Ich habe eben schon zwei Stunden gesucht, kann es aber selbst wohl nicht lösen :confused:

Stema
22.06.2001, 22:59
Hallo Axel,

ich weiß nicht genau, ob ich Dein Problem richtig verstanden habe, aber wie wär's mit einem Batch-File mit folgendem Inhalt?
C:\TAP\TAP_UTI\TKNSUM\TKNSUM-S.EXE, C:\TAP\TAP_UTI\TKNSUM\

Und dann rufst Du dieses Batch-File mit:
Call Shell("cmd /c c:\Batch.bat")
auf.

AWSW
22.06.2001, 23:36
Hallo und Danke Stema,
das hatte ich vor einiger Zeit auch immer so gelöst, aber das kann es doch nicht ganz sein. Ich hatte eigentlich auf einen Aufruf über reinen VBA-Text gebaut. Das sollte doch für eine an sich wohl gebräuchlich Funktion, wie den Aufruf einer exe-Datei möglich sein, ohne mit kleinen Hilfsdateien zu arbeiten - oder ??? Dann muss ich auch nicht für jedes Update die Installationsroutine erweitern...

Trotzdem Danke für Deinen Tipp, aber ich hoffe noch eine andere Lösung zu finden...

AWSW
23.06.2001, 14:25
Hallo Leute,
habe Stema´s Vorschlag noch mal getestet und festgestellt, dass es so gar nicht geht...

Wenn man das über eine Batchdatei macht, sollte der Inhalt der Datei wohl so lauten:


@echo off
C:
cd\TAP\TAP_UTI\TKNSUM\
C:\TAP\TAP_UTI\TKNSUM\TKNSUM-S.EXE


Damit klappt zwar der Auruf, aber ziemlich lahm und auch nicht gerade ausgereift. Obwohl dies keine Kritik sein soll - Stema - Danke noch mal für Dene Mühe :)

Ich hoffe Ihr habt auch noch eine Lösung per VBA parat, da ich sonst den Link in der Oberfläche killen muss, obwohl er ziemlich wichtig für mich ist...

Stefan Kulpa
23.06.2001, 15:05
<font face="Verdana" size="2">Hallo Axel,

was ist das denn für eine EXE-Datei (TKNSUM-S.EXE)? Normalerweise sucht ein Programm selbstständig immer im Applikationsverzeichnis, gefolgt von einer Suche im Systempfad. Unabhängig von der Aufrufvariante - wäre es nicht sinnvoll, den Programmpfad in dem Systempfad aufzunehmen?

Was die Batch-Lösung angeht - das läßt sich doch 1:1 in VB(A) abbilden:</font>

<FONT SIZE=1 FACE=Courier New> ChDrive "C:\TAP\TAP_UTI\TKNSUM"
ChDir "C:\TAP\TAP_UTI\TKNSUM"
Shell "TKNSUM-S.EXE", vbNormalFocus</FONT>

<font face="Verdana" size="2">Ansonsten würde ich es mal (wieder) mit dem API probieren ...</font>

<FONT SIZE=1 FACE=Courier New><FONT COLOR=#000080>Public</FONT> <FONT COLOR=#000080>Declare</FONT> <FONT COLOR=#000080>Function</FONT> GetDesktopWindow <FONT COLOR=#000080>Lib</FONT> "user32" () <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
<FONT COLOR=#000080>Public</FONT> <FONT COLOR=#000080>Declare</FONT> <FONT COLOR=#000080>Function</FONT> ShellExecute <FONT COLOR=#000080>Lib</FONT> "shell32.dll" <FONT COLOR=#000080>Alias</FONT> _
"ShellExecuteA" (<FONT COLOR=#000080>ByVal</FONT> hwnd <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpOperation <FONT COLOR=#000080>As String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpFile <FONT COLOR=#000080>As String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpParameters <FONT COLOR=#000080>As String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> lpDirectory <FONT COLOR=#000080>As String</FONT>, _
<FONT COLOR=#000080>ByVal</FONT> nShowCmd <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>) <FONT COLOR=#000080>As</FONT> <FONT COLOR=#000080>Long</FONT>
<FONT COLOR=#808080><HR></FONT>

<FONT COLOR=#000080>Sub</FONT> LaunchTKN()

<FONT COLOR=#000080>Call</FONT> ShellExecute(GetDesktopWindow(), _
"Open", _
"TKNSUM-S.EXE", _
0&, _
"C:\TAP\TAP_UTI\TKNSUM", _
vbNormalFocus)

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT>
<FONT COLOR=#808080><HR></FONT></FONT>

<font face="Verdana" size="2">... wobei ich mir nicht sicher bin, ob hier explizit der Pfad gewechselt wird.

Gruß,</font>

AWSW
23.06.2001, 15:26
Hi Stefan,
schön dass Du mir hilfst verzweifle ein wenig daran. Die Exe ist ein kleines Tool, dass bei uns die Tätigkeitsnachweise in Summe grafisch anzeigt.

An den Code in der VB_3 exe komme ich aber nicht ran und darf ihn auch nicht ändern, deshalb muss ich die Anpassung in meiner Anwendung vornehmen.

Mit einer Desktopverknüpfung klappt sich der Aufruf 1A nur nicht mit der "normalen" Shell Anweisung.

Ich werde Deine Vorschläge gleich mal testen, den ersten kann ich mit meinen noch bescheidenen VBA-Kenntnissen noch nachvollziehen http://www.ms-office-forum.de/ubb/biggrin.gif, den zweiten druck ich mir mal aus und melde mich in 2 bis 3 Monaten noch mal ;)

VIELEN DANK und VIELE GRÜSSE Axel

AWSW
23.06.2001, 19:32
Danke noch mal klappt 1A