![]() |
programmstart überwachen
Nunja ich hab ein Programm programmiert (glaub man kaum :D) das installer in verschiedenen Sprachen startet.
Jetzt möchte ich aber überprüfen ob die Datei wirklich gestaret wurde bzw. ob sie beschädigt is wie kann ich das machen? achja ich starte das ganze so
Delphi-Quellcode:
vorher wird der Pfad aus einer Ini Datei ausgelesen
ShellExecute(Handle, 'open', PChar(pfads), nil, nil, SW_NORMAL);
|
Re: programmstart überwachen
Hallo, herzlich Willkommen!
Einen erfolgreichen Start kannst du ![]()
Delphi-Quellcode:
Die genauen Rückgabewerte findest du beispielsweise
if ShellExecute(...) > 32 then
// erfolgreich else // nicht erfolgreich ![]() ![]() Grüße |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Sonstige Fragen zu Delphi" nach "Windows API / MS.NET Framework API" verschoben.
|
Re: programmstart überwachen
ok danke
|
Re: programmstart überwachen
noch eine frage muss ich das so schreiben
Delphi-Quellcode:
oder so
begin ShellExecute(Handle, 'open', PChar(pfade), nil, nil, SW_NORMAL);
if ShellExecute(Handle, 'open', PChar(pfads), nil, nil, SW_NORMAL) < 33 then Application.MessageBox('File is not avaliable or destoryed', 'Error', MB_OK) else application.Terminate end
Delphi-Quellcode:
if
ShellExecute(Handle, 'open', PChar(pfads), nil, nil, SW_NORMAL) < 33 then Application.MessageBox('File is not avaliable or destoryed', 'Error', MB_OK) else application.Terminate end |
Re: programmstart überwachen
Nimm die 2. Variante, sonst wird das Programm ja 2 mal gestartet :mrgreen:
|
Re: programmstart überwachen
Das problem is nur er startet die datei dann nicht soner bringt nur ne fehler meldung
|
Re: programmstart überwachen
Versuch es mal so:
Delphi-Quellcode:
procedure TForm1.btnStartClick(Sender: TObject);
var iSuccess: Integer; begin iSuccess := ShellExecute(Handle,'open',PChar('C:\windows\dideldum.exe'),nil,nil,SW_SHOWDEFAULT); if iSuccess < 33 then MessageBox(Handle,PChar(SysErrorMessage(iSuccess)),'Fehler',MB_OK or MB_ICONERROR); end; |
Re: programmstart überwachen
Mir is grad auf gefallen es geht trotzdem so
Delphi-Quellcode:
ich hatte nur Apllication.Terminate und Mesage Box verdreht
begin ShellExecute(Handle, 'open', PChar(pfadg), nil, nil, SW_NORMAL);
if ShellExecute(Handle, 'open', PChar(pfads), nil, nil, SW_NORMAL) > 32 then Application.MessageBox('Datei ist nicht vorhanden oder beschädigt', 'Fehler', MB_OK) else Application.Terminate end sry :wall: |
Re: programmstart überwachen
ich weiss nicht was heute los is es geht trotzdem nicht jetzt probier ichs mal nach deddy
edit: geht auch nicht ermacht einfach weiter edit2: Da hat was mit der zahl nicht gestimmt ich hab jetzt iSuccess < 34 und jetzt gehts |
Re: programmstart überwachen
Das wundert mich ein wenig.
Zitat:
|
Re: programmstart überwachen
ka aber jetzt gehts
|
Re: programmstart überwachen
Zitat:
|
Re: programmstart überwachen
So hab ich das auch verstanden. Wieso musste er also die Abfrage ändern? 33 hieße doch: Programm gestartet, alles OK. Vielleicht zeigt uns der TE mal seinen aktuellen Code, da ist bestimmt ein Fehler im Detail ;)
|
Re: programmstart überwachen
Zitat:
Delphi-Quellcode:
aber ich vermute jetzt einfach mal sowas wie ;)
if ShellExecute(33) > 32 then {ok}
Delphi-Quellcode:
oder ähnlich, was zwar bei Erfolg geht, aber im Fehlerfall auch einen Erfolg meldet
if ShellExecute(33) < 34 then {ok}
|
Re: programmstart überwachen
In #8 hatte ich doch einen Ansatz gepostet, evtl. hat er da etwas "verschlimmbessert" :D
P.S.: Was ist plötzlich mit diesem Thread los, der ist zumindest bei mir plötzlich auf die Schmalspur geraten. :cyclops: |
Re: programmstart überwachen
Zwar glaub ich nicht das ihr den wikrlich sehen wollt weil das iste ine ieziges Cahos aber bitte
Delphi-Quellcode:
Und sag jetzt bloß nix wegen den If then else schleifen mir is das mit case einfach nicht mehr eingefallen wie das zu machen ist. Achja und es funktioniert auch im Fehlerfall (d.h. Er bringt ne Fehlermeldung)
unit Starter;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ImgList, ExtCtrls, ComCtrls, StdCtrls, ShellAPI, jpeg, IniFiles; type THaupt = class(TForm) Image1: TImage; rbgerman: TRadioButton; Image3: TImage; rbenglish: TRadioButton; Image4: TImage; rbspanish: TRadioButton; Image5: TImage; rbjapanese: TRadioButton; Image6: TImage; rbrussian: TRadioButton; bttclose: TButton; bttcontinue: TButton; Image2: TImage; procedure Image2DblClick(Sender: TObject); procedure rbrussianClick(Sender: TObject); procedure rbjapaneseClick(Sender: TObject); procedure rbspanishClick(Sender: TObject); procedure rbenglishClick(Sender: TObject); procedure rbgermanClick(Sender: TObject); procedure bttcloseClick(Sender: TObject); procedure bttcontinueClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Haupt: THaupt; pfads, pfadj, pfadg, pfade, pfadr: String; implementation uses PassWord; {$R *.dfm} procedure THaupt.bttcloseClick(Sender: TObject); begin application.Terminate; end; procedure THaupt.bttcontinueClick(Sender: TObject); var ini: TIniFile; iSuccess: Integer; begin ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+ 'Einstellungen.ini'); pfads := ExtractFilePath(ParamStr(0)) + ini.ReadString('Pfad','Spanisch','Nichts eingetragen'); pfade := ExtractFilePath(ParamStr(0)) + ini.ReadString('Pfad','Englisch','Nichts eingetragen'); pfadr := ExtractFilePath(ParamStr(0)) + ini.ReadString('Pfad','Russisch','Nichts eingetragen'); pfadg := ExtractFilePath(ParamStr(0)) + ini.ReadString('Pfad','Deutsch','Nichts eingetragen'); pfadj := ExtractFilePath(ParamStr(0)) + ini.ReadString('Pfad','Japanisch','Nichts eingetragen'); ini.free; if rbspanish.Checked = true then begin iSuccess := ShellExecute(Handle, 'open', PChar(pfads), nil, nil, SW_NORMAL); if iSuccess < 34 then MessageBox(Handle,PChar(SysErrorMessage(iSuccess)),'Fehler',MB_OK or MB_ICONERROR) else application.Terminate end else if rbenglish.Checked = true then begin iSuccess := ShellExecute(Handle, 'open', PChar(pfade), nil, nil, SW_NORMAL); if iSuccess < 34 then MessageBox(Handle,PChar(SysErrorMessage(iSuccess)),'Fehler',MB_OK or MB_ICONERROR) else application.Terminate end else if rbgerman.Checked = true then begin iSuccess := ShellExecute(Handle, 'open', PChar(pfadg), nil, nil, SW_NORMAL); if iSuccess < 34 then MessageBox(Handle,PChar(SysErrorMessage(iSuccess)),'Fehler',MB_OK or MB_ICONERROR) else Application.Terminate end else if rbjapanese.Checked = true then begin iSuccess := ShellExecute(Handle, 'open', PChar(pfadj), nil, nil, SW_NORMAL); if iSuccess < 34 then MessageBox(Handle,PChar(SysErrorMessage(iSuccess)),'Fehler',MB_OK or MB_ICONERROR) else application.Terminate end else if rbrussian.Checked = true then begin iSuccess := ShellExecute(Handle, 'open', PChar(pfadr), nil, nil, SW_NORMAL); if iSuccess < 34 then MessageBox(Handle,PChar(SysErrorMessage(iSuccess)),'Fehler',MB_OK or MB_ICONERROR) else application.Terminate end end; procedure THaupt.rbgermanClick(Sender: TObject); begin bttcontinue.Enabled := true; bttcontinue.Caption := 'Weiter'; bttclose.Caption := 'Schließen'; end; procedure THaupt.rbenglishClick(Sender: TObject); begin bttcontinue.Enabled := true; bttcontinue.Caption := 'Continue'; bttclose.Caption := 'Close'; end; procedure THaupt.rbspanishClick(Sender: TObject); begin bttcontinue.Enabled := true; bttcontinue.Caption := 'Ulterior'; bttclose.Caption := 'Concluir'; end; procedure THaupt.rbjapaneseClick(Sender: TObject); begin bttcontinue.Enabled := true; end; procedure THaupt.rbrussianClick(Sender: TObject); begin bttcontinue.Enabled := true; end; procedure THaupt.Image2DblClick(Sender: TObject); begin PasswordDlg.showmodal; end; end. |
Re: programmstart überwachen
Das sieht soweit OK aus, da verwundert es mich schon, dass die 33 nicht funktioniert.
[edit] Wäre hier eine RadioGroup nicht angebrachter als ein Haufen CheckBoxen? Außerdem fände ich es so übersichtlicher:
Delphi-Quellcode:
[/edit]
var ini: TIniFile;
iSuccess: Integer; sPfad: string; begin sPfad := ''; ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+ 'Einstellungen.ini'); if rbspanish.Checked then sPfad := ini.ReadString('Pfad','Spanisch','Nichts eingetragen') else if rbenglish.Checked then sPfad := ini.ReadString('Pfad','Englisch','Nichts eingetragen') else if rbgerman.Checked then sPfad := ini.ReadString('Pfad','Deutsch','Nichts eingetragen') else if rbjapanese.Checked then sPfad := ini.ReadString('Pfad','Japanisch','Nichts eingetragen') else if rbrussian.Checked then sPfad := ini.ReadString('Pfad','Russisch','Nichts eingetragen'); ini.free; if sPfad <> '' then begin iSuccess := ShellExecute(Handle, 'open', PChar(sPfad), nil, nil, SW_NORMAL); if iSuccess < 33 then MessageBox(Handle,PChar(SysErrorMessage(iSuccess)),'Fehler',MB_OK or MB_ICONERROR) else application.Terminate end; end; [edit2] Was soll eigentlich passieren, wenn Du "Nichts eingetragen" erhältst? [/edit2] |
Re: programmstart überwachen
[edit2] Was soll eigentlich passieren, wenn Du "Nichts eingetragen" erhältst? [/edit2][/quote]
?? was meinst du damit ? |
Re: programmstart überwachen
Angenommen, die CheckBox rbSpanish ist aktiv, in der Ini gibt es aber keinen Eintrag dazu. Dann gibt das ReadString "Nichts eingetragen" zurück ;)
|
Re: programmstart überwachen
Das passiert nicht weil die Einstellungs.ini mitgleifert wird.
|
Re: programmstart überwachen
Eine Ini lässt sich auch im Editor bearbeiten.
|
Re: programmstart überwachen
ich weiss aber das programm kommt auf ne CD
|
Re: programmstart überwachen
Na gut, es ist Dein Programm, sag aber später nicht, ich hätte Dich nicht darauf hingewiesen ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 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 by Thomas Breitkreuz