Ich hab die Komponente überarbeitet und dabei auch solche Uralt Dinger wie MkDir z.B. ersetzt. Mit Code #9 geht es geht jetzt. Luckie, ich benutze folgende Verzeichnisse:
Delphi-Quellcode:
function GetShellFolderPath(const aFolder: integer): string;
var
pIIL: PItemIDList;
szPath: array[0..Max_Path] of char;
aMalloc: IMalloc;
begin
Result:= '';
OleCheck(SHGetSpecialFolderLocation(0, aFolder, pIIL));
SHGetPathFromIDList(pIIL, szPath);
OleCheck(SHGetMalloc(aMalloc));
aMalloc.Free(pIIL);
Result:= szPath;
end;
function GetTempDir: string;
var
tempFolder: array[0..Max_Path] of char;
begin
GetTempPath(Max_Path - 1, @tempFolder);
Result:= StrPas(tempFolder);
end;
function Vista: boolean;
begin
Result := SysUtils.Win32MajorVersion >= 6;
end;
function GetProgramFilesVerz: string;
const
CSIDL_PROGRAM_FILES = $0026;
var
Reg: TRegistry;
v, S, u: string;
begin
if Vista then
Result := IncludeTrailingPathDelimiter(GetShellFolderPath(CSIDL_PROGRAM_FILES))
else
begin
v := 'C:\xxxx\';
S := 'SOFTWARE\Microsoft\Windows\CurrentVersion';
u := 'ProgramFilesDir';
Reg := TRegistry.Create;
try
with Reg do
begin
RootKey := HKey_LOCAL_MACHINE;
if KeyExists(s) then
begin
OpenKey(s, false);
if ValueExists(u) then
v := IncludeTrailingPathDelimiter(ReadString(u));
closeKey;
end;
end;
finally
Reg.Free;
Result := v;
end;
end;
end;
Delphi-Quellcode:
VerzE:= GetProgramFilesVerz + 'xxxx\';
VerzA:= IncludeTrailingPathDelimiter(GetShellFolderPath(CSIDL_APPDATA) + 'xxxx\';
VerzT:= IncludeTrailingPathDelimiter(GetTempDir) + 'xxxx\';
VerzP:= IncludeTrailingPathDelimiter(GetShellFolderPath(CSIDL_PERSONAL)) + 'xxxx\';
if Vista then
VerzB:= IncludeTrailingPathDelimiter(GetShellFolderPath(CSIDL_COMMON_APPDATA)) + 'xxxx\'
else
VerzB:= IncludeTrailingPathDelimiter(GetShellFolderPath(CSIDL_PERSONAL)) + 'xxxxBackUp\';
Kurze Abschlussfrage: In welches Verzeichnis schreibt Ihr denn die UnInstall.exe hin?