Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit Indy und Vista (https://www.delphipraxis.net/115631-probleme-mit-indy-und-vista.html)

cokotech2 15. Jun 2008 14:22


Probleme mit Indy und Vista
 
Hallo!

Ich habe ein blödes Problem. Ich benutze Delphi2006 und Indy um in meinem Programm ein OnlineUpdate anzubieten.
Leider scheitert das ganze unter Vista wegen der UAC. Das Programm kann anscheinend den Datenstrom nicht öffnen. Witziger Weise scheint das abspeichern der eigenen ConfigDatei zu funktionieren.
Entweder das Propgramm steigt ganz aus "... funktioniert nicht mehr" oder er meldet tatsächlich, das er keine Rechte hat die Datei zu schreiben.
Umgehen kann man das ganze indem man beim Programm unter Kompatiblität sagt, dass es mit Administratorenrechten ausgeführt werden soll, aber dazu eine Anleitung in 10 Sprachen zu schreiben, die dann auch noch gelesen wird ist recht komplex.
Hat jemand eine geniale Idee? (Vista deinstallieren ist zwar das Beste aber keine Option :-) )


Delphi-Quellcode:
Procedure Programmupdate;
var geladen : Boolean;
    responseStream: TFileStream;
    i : integer;
    size : Integer;
    result: integer;
    BEGIN

form1.memo1.Color:=clwindow;
form1.memo1.lines.add(UTF8Decode(AnsiToUTF8(sprachen[sprache].ausg63)));
form1.Repaint;
i:=0;
repeat
inc(i);
form1.memo1.lines.add(InttoStr(i)+UTF8Decode(AnsiToUTF8(sprachen[sprache].ausg64)));
form1.Repaint;
geladen:=true;
responseStream := TFileStream.Create('gildenidentupdate.exe', fmCreate);
try
form1.IdHTTP1.Get(UTF8toAnsi(ProgrammDownloadPfad), responseStream);
except on e:Exception do
BEGIN
application.ShowException(E);
geladen:=false;
END;
end;
responseStream.free;
form1.repaint;
assign (daten, 'gildenidentupdate.exe');
Reset(Daten);
{$I+}
result:=IOResult;
size:=FileSize(Daten);
CloseFile (Daten);
{$I-}
Until ((geladen) AND (size>0) AND (Result=0)) OR (i=10);


If (geladen) AND (size>0) AND (Result=0) then
BEGIN
form1.memo1.lines.add(UTF8Decode(AnsiToUTF8(sprachen[sprache].ausg65)));
updatestart:=true;
form1.Close;
END ELSE
BEGIN
form1.memo1.clear;
form1.memo1.lines.add(UTF8Decode(AnsiToUTF8(sprachen[sprache].ausg66)));
WideShowMessage (UTF8Decode(AnsiToUTF8(sprachen[sprache].ausg67)));
END;

END;

Die Muhkuh 15. Jun 2008 14:24

Re: Probleme mit Indy und Vista
 
Entweder da hin laden, wo Du schreiben kannst (Benutzerverzeichnis) oder eben ein Manifest bei packen, was automatisch Admin-Rechte anfordert (hier entfällt das Häkchen setzen, die UAC meldet sich automatisch beim Programmstart)

Bernhard Geyer 15. Jun 2008 14:27

Re: Probleme mit Indy und Vista
 
Und bitte mit absoluten Pfadangaben. Bei relativen Dateiangaben ohne Pfad ist es immer abhängig vom aktuellen Pfad des Prozesses wohin die Datei geschrieben wird.

cokotech2 15. Jun 2008 19:47

Re: Probleme mit Indy und Vista
 
Oh man bin ich Stulle.
Auf die Idee hätte ich auch selber kommen können!
Das mit dem Manifest ist zwar ne gute Idee, würde aber nerven weil das Ding ja dann jedes Mal fragt, auch wenn keine neue Version vorliegt.
Ich google mal nach der richtigen Variable für die Eigenen Dateien und dann probier ich das mal.

Danke für den schnellen Tipp!!


Gruß Sven!

Phoenix 15. Jun 2008 20:12

Re: Probleme mit Indy und Vista
 
Für Vista kannst Du folgendes machen:
Du lädst zusammen mit dem Update Deines Programmes noch einen kleinen 'Updater' herunter. Dieser hat ein Manifest, das Admin-Rechte beantragt.

Zum Austauschen der Exe musst Du eh das Programm beenden, und dann kannst Du genausogut den Updater starten, der dann mit Adminrechten das Update durchführt. So brauchst Du die UAC wirklich nur, um kurz ins Programmverzeichnis zu schreiben. Die aktualisierte Version startet dann wieder mit normalen Nutzerrechten.

Namenloser 15. Jun 2008 20:21

Re: Probleme mit Indy und Vista
 
Mal was anderes: wa swillst du mit dem andauernden UTF8Decode(AnsiToUTF8()) bezwecken? Du enkodierst es erst und dann dekodierst du es wieder oO. Und du solltest deinen Code übersichtlicher einrücken.

cokotech2 15. Jun 2008 20:34

Re: Probleme mit Indy und Vista
 
Hallo!

Ja das mit dem Einrücken und so... bin Elektriker.... mache das nur so zum Hobby.

Das mit den Decodes ist im Prinzip schon richtig. Die Variablen (verschiedene Ausgaben für verschiedene Sprachen) werden direkt im Quellcode zugewiesen demzufolge glaube ich ANSI... Die konvertiere ich zu UTF8. Das Form und alle Buttons etc. sind Unicode Felder und deshalb muss ich den UTF8 String in einen Unicode Wide-String konvertieren... es sei ich mache einen Denkfehler!


Gruß Sven!


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