Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Update.exe nach TempDir unter Win7 kopieren? (https://www.delphipraxis.net/154318-update-exe-nach-tempdir-unter-win7-kopieren.html)

OrNEC 6. Sep 2010 14:42

Delphi-Version: 7

Update.exe nach TempDir unter Win7 kopieren?
 
Hallo,

ich verwende folgende Komponente um meine Anwendung zu aktualisieren. http://www.kidmoses.com/blog-article.php?bid=22

Da hab ich die Möglichkeit ein Verzeichnis auszuwählen wohin die Update.exe hinein kopiert werden soll. Ich verwende das Verzeichnis Temp. Es klappt auch soweit alles gut, nur unter Windows 7 geht das nicht. Die Update.exe wird irgendwo hin runtergeladen aber sie starten anschließend nicht, obwohl sie das automatisch tun soll.

Ich hab hier die Funktion die das erledigen soll:

Delphi-Quellcode:
function GetTempDir(): string;
var
  PC: Array[0..MAX_PATH + 1] of Char;
  s: string;
begin
  GetTempPath(MAX_PATH, PC);
  s := IncludeTrailingBackslash(StrPas(PC));
  if not DirectoryExists(s) then begin
    s := ExtractFilePath(Application.ExeName);
    s := IncludeTrailingBackslash(s);
    s := s + 'Temp\';
    CreatePath(s);
    end;
  Result := s;
end;
Kann man diese irgendwie an Win 7 anpassen? Wäre sehr dankbar wenn mir jemand helfen würde. Danke!

wicht 6. Sep 2010 15:05

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Was gibt die Funktion denn zurück?
Ich mache es nämlich genau so, wie es aussieht, nur dass ich auf diesen mittleren Teil verzichte, wo ein Temp-Ordner im Programmverzeichnis angelegt wird. Stattdessen bekommt der Benutzer eine Fehlermeldung, wenn der Temp-Ordner nicht ermittelt werden konnte oder nicht existiert.

Bernhard Geyer 6. Sep 2010 15:10

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Ich hoffe du hast auch eine Vista-Erweitertes Manifest um die Virtualisierung des Dateisystems abzuschalten (unter C:\Programme\.. kann man kein Verzeichnis erstellen wenn der Prozess nicht mit Admin-Rechten gestartet wurde (UAC-Aktiv)).

OrNEC 6. Sep 2010 15:11

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Zitat:

Zitat von wicht (Beitrag 1047802)
Was gibt die Funktion denn zurück?
Weiß ich nicht, muss mal schauen.

Also das ist so - unter WinXP startet die Update.exe um sich zu installieren, unter Win7 aber nicht. Hat das vllt nix mit dem Temp Ordner zu tun? Was meinst du wieso startet es nicht?

OrNEC 6. Sep 2010 15:13

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1047803)
Ich hoffe du hast auch eine Vista-Erweitertes Manifest um die Virtualisierung des Dateisystems abzuschalten (unter C:\Programme\.. kann man kein Verzeichnis erstellen wenn der Prozess nicht mit Admin-Rechten gestartet wurde (UAC-Aktiv)).

Die Update.exe erstelle ich mit InnoSetup, wie kann ich da das Manifest einschleusen?

generic 6. Sep 2010 15:14

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Wir hatten das hier schon ziemlich oft...

Programm liegen unter c:\programme bzw c:\program files

Dort darf ein User NICHT schreiben (das ist auch schon bei XP so)!
Somit kannst du dort auch keine Ordner anlegen.
Abhängig von den Manifesten an deiner Anwendung, schlägt die Dateisystem Virtualisierung zu!

Der Temp-Pfad ist (abhängig vom Benutzerkonto und UAC) im Benutzerprofil oder unter c:\windows\temp.
Letzter Ordner kann auch nur mit Adminrechten geschrieben werden.

Die Ordner solltest du wenn überhaupt nur über die "well known folders" ermitteln.

wicht 6. Sep 2010 15:17

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Naja, ich kenne die Komponente, die du da benutzt, nicht. Das habe ich für meine Programme alles selbst gebaut. Wenn aber z.B. kein Temp-Dir ermittelt werden konnte und CreatePath() fehlschlägt, was passiert denn dann? Hast du Windows 7 nicht, um das zu debuggen (der Screenshot ist glaube ich auf Win7 gemacht :P..)?

Zitat:

Die Update.exe erstelle ich mit InnoSetup, wie kann ich da das Manifest einschleusen?
Alles was mit InnoSetup erstellt wurde, hat dieses Manifest schon. Allerdings versucht ja dein Programm den Temp-Ordner zu erstellen, das ist also unabhängig von InnoSetup.

OrNEC 6. Sep 2010 15:17

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Zitat:

Zitat von generic (Beitrag 1047807)
Wir hatten das hier schon ziemlich oft...

Programm liegen unter c:\programme bzw c:\program files

Dort darf ein User NICHT schreiben (das ist auch schon bei XP so)!
Somit kannst du dort auch keine Ordner anlegen.
Abhängig von den Manifesten an deiner Anwendung, schlägt die Dateisystem Virtualisierung zu!

Der Temp-Pfad ist (abhängig vom Benutzerkonto und UAC) im Benutzerprofil oder unter c:\windows\temp.
Letzter Ordner kann auch nur mit Adminrechten geschrieben werden.

Die Ordner solltest du wenn überhaupt nur über die "well known folders" ermitteln.

Ja das weiß ich alles, aber wie lasse ich die Update.exe aus dem TempOrdner starten? Die Update.exe erstellt mir InnoSetup.

wicht 6. Sep 2010 15:21

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Zitat:

Ja das weiß ich alles, aber wie lasse ich die Update.exe aus dem TempOrdner starten? Die Update.exe erstellt mir InnoSetup.
So wie du es da oben schon beschrieben hast, nur lass das selbstständige Erstellen des Ordners weg. Ohne den Rückgabewert deiner Funktion zum Temp-Verzeichnis-holen zu kennen wird das hier schwierig glaube ich. Falls der Wert passt ist die Komponente vielleicht auch nicht ganz sauber.. Jedenfalls ist es schwierig keinen Temp-Dir ermitteln zu können, wenn der User sein System nicht extrem verfrickelt hat...

OrNEC 6. Sep 2010 15:24

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Zitat:

Zitat von wicht (Beitrag 1047811)
Zitat:

Ja das weiß ich alles, aber wie lasse ich die Update.exe aus dem TempOrdner starten? Die Update.exe erstellt mir InnoSetup.
So wie du es da oben schon beschrieben hast, nur lass das selbstständige Erstellen des Ordners weg. Ohne den Rückgabewert deiner Funktion zum Temp-Verzeichnis-holen zu kennen wird das hier schwierig glaube ich. Falls der Wert passt ist die Komponente vielleicht auch nicht ganz sauber.. Jedenfalls ist es schwierig keinen Temp-Dir ermitteln zu können, wenn der User sein System nicht extrem verfrickelt hat...

Der Rückgabewert lautet: "C:\Dokumente und Einstellungen\<Benutzer>\Lokale Einstellungen\Temp"

Ich hab kein Win 7, schade kann das nicht testen.

wicht 6. Sep 2010 15:30

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Sieht erstmal richtig aus.... :?
Falls du die Quellen posten würdest würde ich mir vielleicht die Mühe machen um mal reinzuschauen... solange das Teil nicht vollgepflastert mit Fremdkomponenten ist... Ist nur ein Angebot, keine Ahnung...

DeddyH 6. Sep 2010 15:35

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Außerdem wird die UAC bei Programmen mit "Update" im Namen ganz automatisch aktiv, wenn ich nicht irre.

OrNEC 6. Sep 2010 15:46

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Also der kmNetUpdater schmeißt in den Temp Ordner noch ne updater.exe Datei, und diese starten wahrscheinlich die Update.exe, die ich mit Inno erstelle. Und diser updater hat kein Manifest und will nicht starten. Hm... kann das so sein? :gruebel: Liegt hier das Problem?

mkinzler 6. Sep 2010 15:48

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Ist Setup eine Bestandteil der Upadter-Exe?

OrNEC 6. Sep 2010 15:52

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Zitat:

Zitat von mkinzler (Beitrag 1047820)
Ist Setup eine Bestandteil der Upadter-Exe?

Wie meinst du das? Update.exe erstelle ich mit der Inno. updater.exe erstellt im Temp Verzeichnis die NetUpdate Komponente.

mkinzler 6. Sep 2010 15:54

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Ändere den dateiname mal von updater.exe nach Update-Setup.exe o.ä.
Wenn Setup im Dateiname enthalten ist, werden autoamtisch Adminrechte angefordert

OrNEC 6. Sep 2010 15:55

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Zitat:

Zitat von mkinzler (Beitrag 1047824)
Ändere den dateiname mal von updater.exe nach Update-Setup.exe o.ä.
Wenn Setup im Dateiname enthalten ist, werden autoamtisch Adminrechte angefordert

Wie kann ich das ändern wenn die Komponente diese selber erstellt? :gruebel:

Aber ich schaue mal im Code der Komponente.

OrNEC 6. Sep 2010 16:08

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Zitat:

Zitat von mkinzler (Beitrag 1047824)
Ändere den dateiname mal von updater.exe nach Update-Setup.exe o.ä.
Wenn Setup im Dateiname enthalten ist, werden autoamtisch Adminrechte angefordert

Wow das hat geklappt, hammerhart .... :dancer2:

Thx... :thumb:

generic 6. Sep 2010 16:30

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Zitat:

Zitat von mkinzler (Beitrag 1047824)
Ändere den dateiname mal von updater.exe nach Update-Setup.exe o.ä.
Wenn Setup im Dateiname enthalten ist, werden autoamtisch Adminrechte angefordert

Böser Hack - wäre es nicht besser eine Anwendung mit "richtigen" Manifest zu erzeugen.

Bernhard Geyer 6. Sep 2010 17:53

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Zitat:

Zitat von OrNEC (Beitrag 1047812)
Ich hab kein Win 7, schade kann das nicht testen.

Wie wäre es mit einer VM. Falls du kein Geld ausgeben kannst(willst) solltest du mit VirtualPC und entsprechenden Test-VM's von MS kostenlose zu rande kommen.

mkinzler 6. Sep 2010 18:27

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Diese sollten auch in VirtualBox funktionieren

OrNEC 6. Sep 2010 21:55

AW: Update.exe nach TempDir unter Win7 kopieren?
 
Also ich verstehe die Welt nicht mehr. Ein mal hat das gut funktioniert und dann nicht mehr, obwohl ich nix geändert habe. :wall:

plusplus 8. Sep 2010 00:24

AW: Update.exe nach TempDir unter Win7 kopieren?
 
versuche doch mal

shellexecute(0, 'RUNAS', 'c:\tmpdir\update.exe', ...

das wird in Vista und 7 dem user sagen den exe als admin zu starten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:47 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