AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein ShellExecute führt den Befehl nicht aus
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExecute führt den Befehl nicht aus

Ein Thema von HPB · begonnen am 2. Jul 2014 · letzter Beitrag vom 2. Jul 2014
Antwort Antwort
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#1

ShellExecute führt den Befehl nicht aus

  Alt 2. Jul 2014, 11:17
Guten Tag Delphianer,
ich möchte mit folgendem Code eine Datei kopieren:
Delphi-Quellcode:
  ShellExecute(Handle, 'open', PChar(FPfadPDFAblage + '\pdfrechnung-kopie.bat'),
  nil, nil, SW_SHOW);
Inhalt der BAT-Datei:
Copy unbenannt.pdf D:\Entwicklungen\BPSWAWI\Buero4\Rechnungen\RE-14553-vom-02-07-2014.pdf

Wenn ich mit einem Doppelklick auf die Bat-Datei klicke, wird die Datei kopiert.
Lasse ich obigen Code ausführen, wird die Datei nicht kopiert.
Woran mag dies wohl liegen??
Vielen Dank für Hilfestellungen im voraus.
Mit Gruß
HPB
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#2

AW: ShellExecute führt den Befehl nicht aus

  Alt 2. Jul 2014, 11:25
Wo?
  • Diese API hat einen Rückgabewert, den man eventuell mal auswerten sollte. Dann hat der COPY-Befehl einen Rückgabewert "ErrorLevel", welchen man auswerten sollte.
  • Dieser API kann/sollte man das Arbeitsverzeichnis mitgeben, vorallem wenn in dem Aufruf irgenwo mir relativen Pfaden gearbeitet wird.
  • Und wozu wird eine Batch aufgerufen, um die Datei zu kopieren, anstatt direkt zu kopieren und dabei nur einen Rückgabewert prüfen zu müssen?
  • Oder kann man die PDF nicht gleich unter dem richtigen Namen speichern?

PS: Der Explorer ist schlauer. Er verwendet letztendlich auch auch nur sowas, wie das ShellExecute, nur ist der so intelligent und übergibt das aktuelle Verzeichnis als Arbeitsverzeichnis.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Jul 2014 um 11:30 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: ShellExecute führt den Befehl nicht aus

  Alt 2. Jul 2014, 11:28
Steht in FPfadPDFAblage auch der absolute Pfad?
Markus Kinzler
  Mit Zitat antworten Zitat
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#4

AW: ShellExecute führt den Befehl nicht aus

  Alt 2. Jul 2014, 13:48
Wo?
  • Diese API hat einen Rückgabewert, den man eventuell mal auswerten sollte. Dann hat der COPY-Befehl einen Rückgabewert "ErrorLevel", welchen man auswerten sollte.
  • Dieser API kann/sollte man das Arbeitsverzeichnis mitgeben, vorallem wenn in dem Aufruf irgenwo mir relativen Pfaden gearbeitet wird.
  • Und wozu wird eine Batch aufgerufen, um die Datei zu kopieren, anstatt direkt zu kopieren und dabei nur einen Rückgabewert prüfen zu müssen?
  • Oder kann man die PDF nicht gleich unter dem richtigen Namen speichern?

PS: Der Explorer ist schlauer. Er verwendet letztendlich auch auch nur sowas, wie das ShellExecute, nur ist der so intelligent und übergibt das aktuelle Verzeichnis als Arbeitsverzeichnis.
Danke himitsu für Deine Ausführungen.
Nein, die PDF-Datei kann nicht sofort unter dem richtigen Namen gespeichert werden. Sie wird aus der pdfFactory erzeugt.
Alles Weitere werde ich noch prüfen müssen.
Mit Gruß
HPB
  Mit Zitat antworten Zitat
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#5

AW: ShellExecute führt den Befehl nicht aus

  Alt 2. Jul 2014, 13:49
Steht in FPfadPDFAblage auch der absolute Pfad?
Guten Tag mkinzler,
ja in der Variable steht auch der der absolute Pfad.
Mit Gruß
HPB
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: ShellExecute führt den Befehl nicht aus

  Alt 2. Jul 2014, 13:52
Was gibt ShellExecute denn zurück?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: ShellExecute führt den Befehl nicht aus

  Alt 2. Jul 2014, 14:01
Meiner Meinung nach fehlt in der Batchdatei einfach nur der Pfad wo die Datei unbenannt.pdf zu finden ist. Führt man die Batchdatei da aus wo sich diese unbenannt.pdf-Datei befindet, geht das natürlich, da man zuvor in das Verzeichnis wechselt. Der Verzeichniswechsel wird allerdings nicht im ShellExecute gemacht. Deswegen:

Copy [um PFAD ergänzen]unbenannt.pdf D:\Entwicklungen\BPSWAWI\Buero4\Rechnungen\RE-14553-vom-02-07-2014.pdf
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#8

AW: ShellExecute führt den Befehl nicht aus

  Alt 2. Jul 2014, 14:16
Ich weiß jetzt leider nicht, ob CMD den letzten ErrorLevel des letzten Befehls als eigenen ExitCode rausgibt.

Code:
COPY /V %von% %nach%
IF ERRORLEVEL 1   EXIT %ERRORLEVEL%


COPY /V %von% %nach%
IF %ERRORLEVEL% GTR 0   EXIT %ERRORLEVEL%
Das Exit setzt auf jeden Fall (sollte zumindestens) den ExitCode der CMD.exe
und wenn man mag, dann kann man via /V dem Copy sagen, es solle die Datei nach dem Schreiben nochmal prüfen.

Aber am Ende läuft es doch auf Folgendes hinaus
Delphi-Quellcode:
Status := ShellExecute(Handle, nil, '%ComSpec%', PChar('/C "COPY mitPfad/unbenannt.pdf D:\Entwicklungen\BPSWAWI\Buero4\Rechnungen\RE-14553-vom-02-07-2014.pdf"'), nil, SW_SHOW);

Status := ShellExecute(Handle, nil, '%ComSpec%', PChar('/C "COPY unbenannt.pdf D:\Entwicklungen\BPSWAWI\Buero4\Rechnungen\RE-14553-vom-02-07-2014.pdf"'), PChar(derPfad), SW_SHOW);

// k.A. ob jetzt %ComSpec% aufgelöst wird, oder halt einfach 'cmd.exe' nutzen, eventuell mit dem System32-Verzeichnis davor
und da frag ich mich, warum man dort nicht einfach RenameFile (SysUtils) oder CopyFile (Windws) verwenden sollte, oder besser noch eine der neuen Implementationen aus der IOUtils.
http://docwiki.embarcadero.com/CodeE...s_%28Delphi%29
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Jul 2014 um 14:20 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz