Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Delphi CreateProces findet eine Programmbibliothek nicht (https://www.delphipraxis.net/150516-createproces-findet-eine-programmbibliothek-nicht.html)

Turbo78 19. Apr 2010 18:15


CreateProces findet eine Programmbibliothek nicht
 
Bin neu hier.

Ich habe folgendes Problem:

An meinem Laptop habe ich in Delphi den Aufruf von AutoCAD mittels CreateProces implementiert.
Es Funktioniert einwandfrei.

Am Desktop bekomme ich bei der Ausführung von CreateProces folgende Fehlermeldung:

acad.exe - Komponente nicht gefunden

Die Anwendung konnte nicht gestartet werden, weil ac1st16.dll nicht gefunden wurde. Neuinstallation der Anwendung könnte das Problem beheben.

An beiden Rechnern ist identisch:

1. Windows XP
2. Delphi 7
3. AutoCAD
4. Die angeblich fehlende Bibliothek befindet sich im Verzeichnis:
C:\Programme\Gemeinsame Dateien\Autodesk Shared

Nach der Neuinstallation von AutoCAD hat sich nichts geändert.

Also, was könnte es sein?

Vielen Dank in Voraus.

Toni

mkinzler 19. Apr 2010 18:17

Re: CreateProces findet eine Programmbibliothek nicht
 
Steht der Pfad in der PATH-Variable?

Turbo78 19. Apr 2010 18:25

Re: CreateProces findet eine Programmbibliothek nicht
 
Zitat:

Zitat von mkinzler
Steht der Pfad in der PATH-Variable?

Wie kann ich die PATH-Variable überprüfen bzw. setzen?
Sollte sie nicht bei der Installation gesetzt werden?

mkinzler 19. Apr 2010 18:28

Re: CreateProces findet eine Programmbibliothek nicht
 
In den Eigenschaften des Arbeitsplatzes-> Umgebungsvariablen

Turbo78 19. Apr 2010 19:19

Re: CreateProces findet eine Programmbibliothek nicht
 
Zitat:

Zitat von mkinzler
In den Eigenschaften des Arbeitsplatzes-> Umgebungsvariablen

Auf beiden Rechnern ist der Pfad C:\Programme\Gemeinsame Dateien\Autodesk Shared\ enthalten :(

mkinzler 19. Apr 2010 19:25

Re: CreateProces findet eine Programmbibliothek nicht
 
Es könnte auch eine Datei) z.B. Dll) sein, von dem ac1st16.dll abhängt. Schau sie dir mal mit dem DependencyWalker an

Turbo78 19. Apr 2010 20:27

Re: CreateProces findet eine Programmbibliothek nicht
 
Zitat:

Zitat von mkinzler
Es könnte auch eine Datei) z.B. Dll) sein, von dem ac1st16.dll abhängt. Schau sie dir mal mit dem DependencyWalker an

Wenn ich sie beide mit DependencyWalker analysiere, bekomme ich unterschiedliche Ergebnisse. Am Laptop fehlen 3 DLL-s und auf dem PC eine weitere. Das Kopieren der fehlenden Datei hat leider nicht geholfen.
Toni

SirThornberry 19. Apr 2010 21:45

Re: CreateProces findet eine Programmbibliothek nicht
 
1) Ist das nun ein Delphiproblem oder ein allgemeines? Also tritt der Fehler nur beim Aufruf von CreateProcess auf oder auch wenn du das Programm per Doppeklick öffnest?

2) Existieren die bemängelten Dateien auf dem Rechner?

mkinzler 19. Apr 2010 21:49

Re: CreateProces findet eine Programmbibliothek nicht
 
Zitat:

1) Ist das nun ein Delphiproblem oder ein allgemeines?
Wohl eher nicht.

DP-Maintenance 19. Apr 2010 21:49

DP-Maintenance
 
Dieses Thema wurde von "mkinzler" von "Object-Pascal / Delphi-Language" nach "Windows 9x / ME / 2000 / XP / 2003 / Vista / 7" verschoben.
Kein Sprachproblem

Turbo78 19. Apr 2010 21:52

Re: CreateProces findet eine Programmbibliothek nicht
 
Zitat:

Zitat von SirThornberry
1) Ist das nun ein Delphiproblem oder ein allgemeines? Also tritt der Fehler nur beim Aufruf von CreateProcess auf oder auch wenn du das Programm per Doppeklick öffnest?

2) Existieren die bemängelten Dateien auf dem Rechner?

Das Problem tritt nur beim Aufruf von AutoCAD über CreateProces in Delphi auf - ein direkter Aufruf läuft problemlos.

Die bemängelte Datei existiert auf beiden Rechnern. Durch das DependencyWalker habe ich festgestellt, dass eine untergeordnete Bibliothek auf dem PC nicht vorhanden war. Das Kopieren dieser Datei auf den PC hat leider Nichts gebracht.

SirThornberry 19. Apr 2010 22:22

Re: CreateProces findet eine Programmbibliothek nicht
 
Wenn das so ist hast du vermutlich beim CreateProcess nicht das WorkingDirectory angegeben. Und in der Verknüpfung über die du das Programm sonst startest steht sicher das richtige Arbeitsverzeichnis drin.

Turbo78 19. Apr 2010 22:51

Re: CreateProces findet eine Programmbibliothek nicht
 
Zitat:

Zitat von SirThornberry
Wenn das so ist hast du vermutlich beim CreateProcess nicht das WorkingDirectory angegeben. Und in der Verknüpfung über die du das Programm sonst startest steht sicher das richtige Arbeitsverzeichnis drin.

Sowohl Delphi als auch AutoCAD sind an beiden Rechnern in denselben Verzeichnis installiert.
Die Command Line ist identisch:

'C:\Programme\...\acad.exe D:\Data\...\Zeichnung.dxf'

Diese Comand Line wird im cmd-Window (als DOS-command) fehlerfrei ausgeführt.

SirThornberry 20. Apr 2010 07:52

Re: CreateProces findet eine Programmbibliothek nicht
 
Hast du denn schon probiert bei CreateProcess das korrekte Arbeitsverzeichnis anzugeben?

Turbo78 20. Apr 2010 08:54

Re: CreateProces findet eine Programmbibliothek nicht
 
Zitat:

Zitat von SirThornberry
Hast du denn schon probiert bei CreateProcess das korrekte Arbeitsverzeichnis anzugeben?

Delphi-Quellcode:
      Ret := CreateProcess(nil,
                           PCmd,
                           nil, nil, false,
                           NORMAL_PRIORITY_CLASS,
                           nil, nil,
                           StartupInfo,
                           Processinfo);
PCmd ist die oben genannte Kommandozeile.

Soll ich als Arbeitsverzeichnis das Programmverzeichnis oder das Verzeichnis mit den Daten angeben?
Welches Parameter ist dies?

Was ich nicht geschrieben habe, CreateProcess liefert beim o.g. Fehler kein Error Code (also, Ret ist True).

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

SirThornberry 20. Apr 2010 09:01

Re: CreateProces findet eine Programmbibliothek nicht
 
Hier kannst du es nachlesen:
http://msdn.microsoft.com/en-us/libr...25(VS.85).aspx

Der Parameter welcher angegeben werden sollte lautet: lpCurrentDirectory

Turbo78 20. Apr 2010 09:24

Re: CreateProces findet eine Programmbibliothek nicht
 
Zitat:

Zitat von SirThornberry
Hier kannst du es nachlesen:
http://msdn.microsoft.com/en-us/libr...25(VS.85).aspx

Der Parameter welcher angegeben werden sollte lautet: lpCurrentDirectory

Danke, aber die Fehlermeldung bleibt unabhängig davon was für ein CurrentDirectory ich angegeben habe.

Dezipaitor 20. Apr 2010 09:30

Re: CreateProces findet eine Programmbibliothek nicht
 
Du musst den Parameter lpEnvironment initialisieren.

SirThornberry 20. Apr 2010 09:33

Re: CreateProces findet eine Programmbibliothek nicht
 
Welchen Wert hast du denn für das CurrentDirectory angegeben? Das gleiche wie in der Verknüpfung über die du normalerweise das Programm startest?

@Dezipaitor: Muss man das angeben?
Laut MSDN:
Zitat:

A pointer to the environment block for the new process. If this parameter is NULL, the new process uses the environment of the calling process.

Turbo78 20. Apr 2010 09:53

Re: CreateProces findet eine Programmbibliothek nicht
 
Zitat:

Zitat von SirThornberry
Welchen Wert hast du denn für das CurrentDirectory angegeben? Das gleiche wie in der Verknüpfung über die du normalerweise das Programm startest?

@Dezipaitor: Muss man das angeben?
Laut MSDN:
Zitat:

A pointer to the environment block for the new process. If this parameter is NULL, the new process uses the environment of the calling process.

Ich habe die Lösung gefunden (sie ist nicht sauber, da ich ein Verzeichniss direkt angegeben habe), obwohl mir nicht klar ist warum es auf dem Laptop ohne diese Änderung funktioniert. Also, als CurrentDir habe ich nicht das Programmverzeichnis sondern das Verzeichnis in welchem sich die gemeldete dll befindet angegeben:

C:\Programme\Gemeinsame Dateien\Autodesk Shared\

Das Problem liegt offensichtlich darin, dass beim Programmaufruf über CreateProces der Pfad mit den Bibliotheken nicht bekannt ist.

Kann es sein, dass das CreateProcess die PATH Variable nicht benutzt? Dies wäre die einzige Erklärung, da ich das Programm direkt problemlos aufrufen kann.
Es bleibt aber unerklärbar warum es am Laptop funktioniert.

Also, warum CreateProcess den "shared" Pfad (Gemeinsame Dateien) am Laptop durchsucht und am PC nicht?

Darf man als CurrentDirectory die PATH Variable angeben?

Angel4585 20. Apr 2010 09:56

Re: CreateProces findet eine Programmbibliothek nicht
 
Liegt die DLL auf der einen Seite vllt zusätzlich im Programmverzeichnis?

Dezipaitor 20. Apr 2010 10:16

Re: CreateProces findet eine Programmbibliothek nicht
 
Schreib bitte mal, ob dieser Code funktioniert bei deinem Problem:
http://blog.delphi-jedi.net/2008/04/...in-full-glory/

Turbo78 20. Apr 2010 11:42

Re: CreateProces findet eine Programmbibliothek nicht
 
Zitat:

Zitat von Dezipaitor
Schreib bitte mal, ob dieser Code funktioniert bei deinem Problem:
http://blog.delphi-jedi.net/2008/04/...in-full-glory/

Es wird nicht nötig sein - ich habe das Problem gelöst.

Wie eigentlich zu vermuten war, lag die Ursache nicht in der falschen Nutzung von CreateProces, sondern in einem Fehler in der Delphi - Umgehbung.

Also, ich habe das Environment in Delphi untersucht und festgestellt, dass unter
Tools/Environment Options/Environment Variables die Variable Path überschrieben wurde.

Es war eine Leiche (ich kann mich nicht mehr errinern wann und warum sie entstanden ist). In dieser Leiche var der Pfad ...\Autodesk Share nicht enthalten. Die Leiche ist vor der Installation von AutoCAD entstanden und wurde natürlich bei der Installation von AutoCAD nicht angepasst.

Vielen Dank allen die mir bei der Analyse geholfen haben.

Toni


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz