搜索C:
驅動器中的文件(也可能是任何其他驅動器,因爲用戶可能選擇在其他地方安裝軟件)是可行的,但可能需要很長時間。
我建議你,而不是檢查的SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenSCAD
註冊表項的存在:
const
OpenSCADRegKey = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenSCAD';
function PrepareToInstall(var NeedsRestart: Boolean): String;
var
ResultCode: integer;
begin
Exec('OpenSCAD-xxx-Installer.exe', '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
if RegKeyExists(HKEY_CURRENT_USER_32, OpenSCADRegKey) or
RegKeyExists(HKEY_CURRENT_USER_64, OpenSCADRegKey) or
RegKeyExists(HKEY_LOCAL_MACHINE_32, OpenSCADRegKey) or
RegKeyExists(HKEY_LOCAL_MACHINE_64, OpenSCADRegKey) then
begin
Log('OpenSCAD is installed');
end
else
begin
Log('OpenSCAD is not installed');
// Abort installation
Result := 'OpenSCAD is not installed';
Exit;
end;
end;
如果你需要知道的安裝位置,讀取和解析UninstallString
值:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenSCAD]
"UninstallString"="C:\\Program Files\\OpenSCAD\\Uninstall.exe"
如果您堅持要搜索openscad.exe
使用:
function FindFile(RootPath: string; FileName: string): string;
var
FindRec: TFindRec;
FilePath: string;
begin
Log(Format('Searching %s for %s', [RootPath, FileName]));
if FindFirst(RootPath + '\*', FindRec) then
begin
try
repeat
if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
begin
FilePath := RootPath + '\' + FindRec.Name;
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0 then
begin
Result := FindFile(FilePath, FileName);
if Result <> '' then Exit;
end
else
if CompareText(FindRec.Name, FileName) = 0 then
begin
Log(Format('Found %s', [FilePath]));
Result := FilePath;
Exit;
end;
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end
else
begin
Log(Format('Failed to list %s', [RootPath]));
end;
end;
請參見[依賴關係無法安裝時中止安裝](http://stackoverflow.com/q/37131619/850848)。 –
謝謝你。如果你不介意幫助澄清...該鏈接的解決方案有代碼:如果不是FileExists(ExpandConstant('{app} \ {#MyAppExeName}'))...這是否意味着我必須知道在哪裏openscad是安裝?感謝您的鏈接。 –
謝謝,我很難找到一個解決方案,「如果用戶已經安裝openscad」,所以也許我應該改變我的問題的標題。我想我需要在Pascal中執行相當於os.walk(python)的命令來查找openscad.exe,但我不知道如何執行此操作。用戶可以在任何目錄下安裝openscad,因此我無法確定在哪裏可以找到它。乾杯。 –