AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme auf neuem Rechner

Ein Thema von Rawsche · begonnen am 26. Jul 2019 · letzter Beitrag vom 27. Jul 2019
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

AW: Probleme auf neuem Rechner

  Alt 26. Jul 2019, 14:42
Welche Delphi Version verwendest du? Solltest du noch kein Unicode Delphi benutzen, ruf mal explizit ShellExecuteW mit PWideChar auf.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.176 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Probleme auf neuem Rechner

  Alt 26. Jul 2019, 15:16
Hallo,

...Dieser hat leider ein Leerzeichen und ein Sonderzeichen in sich. Zwar nicht mein echter Name, aber in etwas sieht er so aus: "Max Müller"
Ich vermute es liegt am Leerzeichen...

ShellExecute(Handle, 'OPEN', PChar('"' + 'C:\Datei 2.txt' + '"'), nil, nil, 1);

Edit: Dateien sollte man im Root nicht speichern...
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)

Geändert von juergen (26. Jul 2019 um 15:22 Uhr) Grund: Flüchtigkeitsfehler...
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Probleme auf neuem Rechner

  Alt 27. Jul 2019, 16:29
Hallo zusammen,

ich denke das der einzige der das Problem hier richtig erkannt hat Jürgen ist:

Hallo,
Ich vermute es liegt am Leerzeichen...

ShellExecute(Handle, 'OPEN', PChar('"' + 'C:\Datei 2.txt' + '"'), nil, nil, 1);
Wieso nach
form1.close; die Application weg sein soll muss mir mal jemand erklären.
Das ist nämlich definitiv nicht so.
Die Application endet nicht einfach in einer Methode!!!!!!

Die Application wird beendet nach einer PostQuitMessage. Damit wird dann die Messageloop beendet.

Das hier fällt auf die Nase wenn Leerzeichen im Pfad sind.

ShellExecute(Handle, 'open',PChar(Application.ExeName), nil, nil, 0); deshalb in DoubleQuotes:

ShellExecute(Handle, 'open',PChar(AnsiQuotedStr(Application.ExeName, '"')), nil, nil, 0);
und natürlich ist es hilfreich auf Fehler zu prüfen...
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Probleme auf neuem Rechner

  Alt 27. Jul 2019, 17:34
Das stimmt. Aber aussteigen und gleichzeitig wieder einsteigen wollen, ist auch in der Programmiernung problematisch.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: Probleme auf neuem Rechner

  Alt 27. Jul 2019, 17:46
Zitat:
Das ist nämlich definitiv nicht so.
Die Application endet nicht einfach in einer Methode!!!!!!
Ich behaupte was anderes.
Du kannst das ja mal testen. Schreib ein showmessage in die Events OnClose, OnCloseQuery und OnDestroy.
Ohne es getestet zu haben sollten alle Messageboxen bis OnDestroy durchlaufen bevor jemals ShellEcecute aufgerufen wird.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#6

AW: Probleme auf neuem Rechner

  Alt 27. Jul 2019, 17:58
Das stimmt. Aber aussteigen und gleichzeitig wieder einsteigen wollen, ist auch in der Programmiernung problematisch.
Mag sein, ist aber in diesem Fall völlig unerheblich.

Es soll ein neuer Prozess gestartet werden (zufälligerweise die gleiche Anwendung wie die aktuell läuft).
Der aktuelle Prozess soll beendet werden.

Da es sich um zwei völlig voneinander unabhängige Prozesse handelt ist das ohne große Schwierigkeiten zu bewältigen.

@DieDolly
Wenn man die MainForm schließt, dann wird die Anwendung nicht hart beendet, sondern die Anwendung dümpelt da noch ein wenig herum und sendet lustig Nachrichten und beendet sich dann ganz sauber und kontrolliert.

So funktioniert es mit Delphi 10.3.2 egal ob in einem Verzeichnis mit Leerzeichen oder ohne. Aber falls es nicht gestartet werden könnte, dann wird nun eine aussagekräftige Fehlermeldung ausgegeben.
Delphi-Quellcode:
var
  ReturnValue: HINST;
begin
  ReturnValue := ShellExecute(self.Handle, 'open', PChar(Application.ExeName), nil, nil, SW_SHOWNORMAL);
  if ReturnValue < 32 then
    RaiseLastOSError();
  Application.MainForm.Close();
end;
Update:

Beim Beenden der Anwendung auf so etwas wie ShowMessage zu setzen und daraus eine Schlußfolgerung zu ziehen ist sehr schlecht, denn auch dieser Dialog (aufgerufen von ShowMessage) bekommt eine Nachricht sich doch bitte wieder zu schließen, was dieser dann auch ohne zu zögern macht.

Beispiel 1:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender:TObject);
begin
  Application.MainForm.Close();
  ShowMessage('Können Sie mich sehen?');
end;
Leider wird hier weder ein Dialog angezeigt, noch ist dieser Aufruf blockierend (weil das Öffnen/Anzeigen quasi zeitgleich mit der Schließen-Anforderung erfolgt und wir nicht schnell genug schauen können, bzw. auch der Monitor zu träge ist).

Beispiel 2:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender:TObject);
begin
  Application.MainForm.Close();
  Sleep(5000);
end;
Hier wird das Beenden der Anwendung sehr wohl um genau diese 5000 Millisekunden verzögert.

Fazit:

Es ist völlig egal, wo man den Prozess startet, ob vor oder nach dem Application.MainForm.Close(); . Allerdings würde ich die aktuelle Anwendung/Prozess erst dann beenden, wenn ich den neuen Prozess erfolgreich starten konnte.

Denksport:
Wer Lust hat kann sich ja mal überlegen, was hier passiert:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender:TObject);
begin
  Application.MainForm.Close();
  ShowMessage('Können Sie mich sehen?');
  Sleep(5000);
end;
Allerdings sollte man erst raten, es dann ausprobieren und dann dafür eine Erklärung finden.

Geändert von Schokohase (28. Jul 2019 um 13:30 Uhr)
  Mit Zitat antworten Zitat
Rawsche

Registriert seit: 18. Jul 2018
16 Beiträge
 
#7

AW: Probleme auf neuem Rechner

  Alt 27. Jul 2019, 11:06
Welche Delphi Version verwendest du? Solltest du noch kein Unicode Delphi benutzen, ruf mal explizit ShellExecuteW mit PWideChar auf.
Ich benutze kein Delphi sondern Lazarus...
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
264 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Probleme auf neuem Rechner

  Alt 27. Jul 2019, 11:23
Und wenn du dir die richtige Version des Pfades zuerst holst. SHGetKnownFolderPath müsste doch auch Lazarus kennen.
  Mit Zitat antworten Zitat
Rawsche

Registriert seit: 18. Jul 2018
16 Beiträge
 
#9

AW: Probleme auf neuem Rechner

  Alt 27. Jul 2019, 12:17
Danke für eure Antworten. Es war mir nun zu blöd mich noch länger damit zu ärgern.
Ich habe deshalb nun auf den Neustart verzichtet und eine andere Lösung gefunden.

Trotzdem Vielen Dank für eure Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.069 Beiträge
 
Delphi 12 Athens
 
#10

AW: Probleme auf neuem Rechner

  Alt 27. Jul 2019, 14:04
Herausfinden lässt sich das leicht über den Process Monitor.
Dort einfach den Filter setzen auf "Path" "contains" "<Name deiner Exe>". Dann solltest du sehen was dort schief geht.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:47 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