Entwickler-Ecke

Dateizugriff - Shellexecute


Apo95 - Mi 10.04.13 21:07
Titel: Shellexecute
Hi,

ich habe derzeit ein kleines Problem(chen) mit dem Versuch, eine Hilfedatei zu öffnen. Gedacht habe ich mir das so :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Indexeinblenden1Click(Sender: TObject);
begin
cStore := ExpandEnvStr('%ProgramFiles%\EA\temp\QUIZGG_Hilfe.chm');
// cStore := 'C:\Programme\EA\GoetheQuiz 2010beta\Help\QUIZGG_Hilfe.chm';

       if fileExists(cStore_reg)=false then
      begin
        Application.MessageBox('GoetheQuiz 2010 war nicht in der Lage, die Hilfedatei zu finden.'+
      #13+  'Installieren Sie diese bitte erneut. Weitere Informationen entehmen Sie bitte  der Liesmich-Datei auf CD oder in der Verpackung.',
      'Fataler Fehler', MB_ICONSTOP or MB_OK) ;
     end
      else begin

  SHELLEXECUTE(handle,nil,PCHAR(cStore),nil,nil,SW_SHOW);
 //   SHELLEXECUTE(handle,nil,('QUIZGG_Hilfe.chm'),nil,PCHAR('C:\Programme\EA\temp'),SW_SHOW);
      end;
end;


Die Datei wird nicht geöffnet, sondern die Fehlermeldung erscheint (s.u.). Ich weiß nicht, was hier falsch läuft... .

Für Hilfe bin ich sehr dankbar!!

Lieben Gruß


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Mi 10.04.2013 um 23:35


Gerd Kayser - Mi 10.04.13 23:48

Mir fallen da 3 Dinge auf. Möglicherweise steckt Dein Problem bei Punkt 2 oder 3.

1. Man vergleicht NIE direkt mit "= false" oder "= true".

Delphi-Quelltext
1:
if not FileExists(cStore_reg) then                    


2. Der Dateiname enthält ein Leerzeichen.

3. Schau Dir mal in der Eingabeaufforderung (CMD) an, wie das Programmverzeichnis genau heißt. Auf meinem Rechner (Windows 7 32-Bit) wird im Windowsexplorer "C:\Programme" angezeigt, in der Eingabeaufforderung jedoch "C:\Program Files". Wenn ich mich nicht irre, gibt es bei 64-Bit zwei Programmverzeichnisse.

Lasse Dir auch mal anzeigen, ob das Verzeichnis richtig zusammengesetzt ist.

Delphi-Quelltext
1:
ShowMessage(cStore_reg);                    


Tranx - Do 11.04.13 04:35

user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:

3. Schau Dir mal in der Eingabeaufforderung (CMD) an, wie das Programmverzeichnis genau heißt. Auf meinem Rechner (Windows 7 32-Bit) wird im Windowsexplorer "C:\Programme" angezeigt, in der Eingabeaufforderung jedoch "C:\Program Files". Wenn ich mich nicht irre, gibt es bei 64-Bit zwei Programmverzeichnisse.


Das mit "C:\Program Files" und "C:\Programme" ist bei Windows nur ein Mapping. Der Verweis in beiden Fällen geht auf das selbe Verzeichnis. Im 64-bit Windows gibt es "C:\Program files" für 64 bit und "C:\Program Files (x86)" für 32 bit-Programme. Die jedoch als "C:\Programme" (64 bit) und "C:\Programme (x86)" (32 bit), gemappt werden. Infos dazu:

http://kittblog.com/article/3/windows/aus-program-files-wieder-programme/242/aus-program-files-wieder-programme/


Gerd Kayser - Do 11.04.13 06:58

user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
Das mit "C:\Program Files" und "C:\Programme" ist bei Windows nur ein Mapping.

Es sieht wohl so aus, dass es hier wohl ein Problem auf meinem Rechner gibt.

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten.

C:\Users\GerdKayser>cd\

C:\>dir *.* /a d
 Datenträger in Laufwerk C: ist System
 Volumeseriennummer: 3AA2-CE9E

 Verzeichnis von C:\

21.11.2012  19:01    <DIR>          $Recycle.Bin
10.06.2009  23:42                24 autoexec.bat
12.12.2012  04:30    <DIR>          CanoScan
10.06.2009  23:42                10 config.sys
14.07.2009  06:53    <VERBINDUNG>   Documents and Settings [C:\Users]
15.09.2012  06:21    <VERBINDUNG>   Dokumente und Einstellungen [C:\Users]
16.09.2012  08:59                 0 IO.SYS
16.09.2012  08:59                 0 MSDOS.SYS
11.04.2013  05:51    <DIR>          Program Files
29.03.2013  20:43    <DIR>          ProgramData
15.09.2012  06:21    <VERBINDUNG>   Programme [C:\Program Files]
15.09.2012  06:21    <DIR>          Recovery
07.02.2013  12:47    <DIR>          Sniffer
11.04.2013  00:07    <DIR>          System Volume Information
11.04.2013  00:09    <DIR>          Users
11.04.2013  06:08    <DIR>          Windows

 Verzeichnis von C:\

               4 Datei(en),             34 Bytes
              12 Verzeichnis(se), 38.540.886.016 Bytes frei

C:\>dir
 Datenträger in Laufwerk C: ist System
 Volumeseriennummer: 3AA2-CE9E

 Verzeichnis von C:\

10.06.2009  23:42                24 autoexec.bat
10.06.2009  23:42                10 config.sys
11.04.2013  05:51    <DIR>          Program Files
07.02.2013  12:47    <DIR>          Sniffer
11.04.2013  00:09    <DIR>          Users
11.04.2013  06:08    <DIR>          Windows
               2 Datei(en),             34 Bytes
               4 Verzeichnis(se), 38.540.886.016 Bytes frei

Im Windowsexplorer sehe ich bei eingeblendeten versteckten Dateien und Systemdateien "c:\programme" zweimal, davon einmal mit einem Schloßsymbol. Darauf kann ich selbst im abgesicherten Modus nicht zugreifen. Wenn ich mich nicht irre, war das bereits seit der Windowsinstallation so. Vielleicht setze ich demnächst mal mein Windows neu auf.


SvenAbeln - Do 11.04.13 08:27


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Indexeinblenden1Click(Sender: TObject);
begin
cStore := ExpandEnvStr('%ProgramFiles%\EA\temp\QUIZGG_Hilfe.chm');

       if fileExists(cStore_reg)=false then
      begin
        Application.MessageBox('GoetheQuiz 2010 war nicht....','Fataler Fehler', MB_ICONSTOP or MB_OK;
     end
      else begin
        SHELLEXECUTE(handle,nil,PCHAR(cStore),nil,nil,SW_SHOW);
      end;
end;

Du verwendet hier 2 verschiedene Variablen, cStore und cStore_reg. Steht denn auch in beiden der richtige Pfad zu der Hilfedatei?


jaenicke - Do 11.04.13 09:13

user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
Im Windowsexplorer sehe ich bei eingeblendeten versteckten Dateien und Systemdateien "c:\programme" zweimal, davon einmal mit einem Schloßsymbol. Darauf kann ich selbst im abgesicherten Modus nicht zugreifen. Wenn ich mich nicht irre, war das bereits seit der Windowsinstallation so. Vielleicht setze ich demnächst mal mein Windows neu auf.
Das kannst du dir sparen, denn das ist richtig so. Systemdateien einblenden sollte man seit Vista nur, wenn man genau diese Sachen so sehen möchte. Ansonsten reicht es vollkommen, wenn du versteckte einblendest, das entspricht in etwa der Einstellung unter XP, wenn du auch Systemdateien eingeblendet hattest.
Dann sieht das auch normal aus. ;-)

Zum Thema:
Einen solchen Pfad zu nehmen wie hier ist schlicht keine gute Idee, denn was, wenn der User das Programm schlicht nicht an den Ort installieren möchte? Stattdessen sollte der Installer (wie es eigentlich auch die meisten tun) das Installationsverzeichnis in der Registry ablegen, dann kannst du dieses benutzen. Und sollte das nicht in der Registry stehen, kannst du ja vom Verzeichnis deiner .exe ausgehen.


Tranx - Do 11.04.13 10:24

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Zum Thema:
Einen solchen Pfad zu nehmen wie hier ist schlicht keine gute Idee, denn was, wenn der User das Programm schlicht nicht an den Ort installieren möchte? Stattdessen sollte der Installer (wie es eigentlich auch die meisten tun) das Installationsverzeichnis in der Registry ablegen, dann kannst du dieses benutzen. Und sollte das nicht in der Registry stehen, kannst du ja vom Verzeichnis deiner .exe ausgehen.


Dem kann ich nur zustimmen. Und zudem, eine Hilfedatei in ein Verzeichnis mit dem Namen "Temp" abzulegen ist zudem noch unsinnig, denn was ist, wenn Du mal auf die Idee kommst, die Temp-Verzeichnisse auf dem Laufwerk zu löschen. Temp ist ja bloß für das, was der name sagt: temporäre Dateien. Und eine Hilfe ist eben alles andere als das.