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;