Files
dat-thang/dat-thang.iss
T

149 lines
4.7 KiB
Plaintext
Raw Normal View History

2026-10-19 00:12:36 -04:00
#define AppName "dat-thang"
#ifndef AppVersion
#define AppVersion "0.0.002"
#endif
#define AppPublisher "dat-gpt contributors"
#define AppExeName "dat-thang.exe"
[Setup]
AppId={{D1E521E5-19F8-4D7C-9C44-23B19D070A73}
AppName={#AppName}
AppVersion={#AppVersion}
AppPublisher={#AppPublisher}
DefaultDirName={autopf}\dat-thang
DefaultGroupName=dat-thang
DisableProgramGroupPage=no
PrivilegesRequired=lowest
PrivilegesRequiredOverridesAllowed=dialog
ArchitecturesAllowed=x64
ArchitecturesInstallIn64BitMode=x64
WizardStyle=modern
WizardResizable=yes
SetupIconFile=assets\dat-thang.ico
UninstallDisplayIcon={app}\dat-thang.exe
OutputDir=dist\installers
OutputBaseFilename=dat-thang-setup-{#AppVersion}-x64
Compression=lzma2
SolidCompression=yes
ChangesEnvironment=yes
CloseApplications=yes
RestartApplications=no
Uninstallable=yes
VersionInfoVersion={#AppVersion}.0
VersionInfoProductName=dat-thang
VersionInfoDescription=dat-thang v{#AppVersion} (prototype, pre-alpha)
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "Create a desktop shortcut for dat-thang"; GroupDescription: "Additional shortcuts:"; Flags: unchecked
Name: "addtopath"; Description: "Add dat-gpt terminal commands to PATH"; GroupDescription: "Terminal integration:"; Flags: unchecked
Name: "launch"; Description: "Launch dat-thang when setup finishes"; GroupDescription: "Finishing up:"; Flags: unchecked
[Files]
Source: "dist\windows-x64\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "assets\dat-shell.cmd"; DestDir: "{app}"; Flags: ignoreversion
Source: "assets\dat-thang.ico"; DestDir: "{app}"; Flags: ignoreversion
[Icons]
Name: "{group}\dat-thang"; Filename: "{app}\dat-thang.exe"; WorkingDir: "{userdocs}"; IconFilename: "{app}\dat-thang.exe"
Name: "{group}\dat-gpt command prompt"; Filename: "{cmd}"; Parameters: "/K ""{app}\dat-shell.cmd"""; WorkingDir: "{userdocs}"; IconFilename: "{app}\dat-thang.exe"
Name: "{group}\Windows build and bridge notes"; Filename: "{app}\docs\windows-build.md"
Name: "{autodesktop}\dat-thang"; Filename: "{app}\dat-thang.exe"; WorkingDir: "{userdocs}"; IconFilename: "{app}\dat-thang.exe"; Tasks: desktopicon
[Run]
Filename: "{app}\dat-thang.exe"; Description: "Launch dat-thang"; Flags: postinstall nowait skipifsilent; Tasks: launch
[Code]
const
EnvironmentKey = 'Environment';
PathValueName = 'Path';
function PathRegistryRoot(): Integer;
begin
if IsAdminInstallMode then
Result := HKEY_LOCAL_MACHINE
else
Result := HKEY_CURRENT_USER;
end;
function PathContainsEntry(const PathValue, Entry: String): Boolean;
var
Parts: TArrayOfString;
I: Integer;
begin
Result := False;
Parts := SplitString(PathValue, ';');
for I := 0 to GetArrayLength(Parts) - 1 do
if CompareText(Trim(Parts[I]), Entry) = 0 then
begin
Result := True;
Exit;
end;
end;
procedure AddInstallPath;
var
Root: Integer;
PathValue, Entry: String;
begin
Root := PathRegistryRoot();
Entry := ExpandConstant('{app}');
if not RegQueryStringValue(Root, EnvironmentKey, PathValueName, PathValue) then
PathValue := '';
if not PathContainsEntry(PathValue, Entry) then
begin
if PathValue <> '' then
PathValue := PathValue + ';';
PathValue := PathValue + Entry;
RegWriteExpandStringValue(Root, EnvironmentKey, PathValueName, PathValue);
RegWriteStringValue(Root, 'Software\dat-gpt\Installer', 'AddedDatPath', Entry);
end;
end;
procedure RemoveInstallPath;
var
Root: Integer;
PathValue, Entry, NewPath, AddedEntry: String;
Parts: TArrayOfString;
I: Integer;
begin
Root := PathRegistryRoot();
Entry := ExpandConstant('{app}');
if not RegQueryStringValue(Root, 'Software\dat-gpt\Installer', 'AddedDatPath', AddedEntry) then
Exit;
if CompareText(AddedEntry, Entry) <> 0 then
Exit;
if not RegQueryStringValue(Root, EnvironmentKey, PathValueName, PathValue) then
Exit;
Parts := SplitString(PathValue, ';');
NewPath := '';
for I := 0 to GetArrayLength(Parts) - 1 do
if (Trim(Parts[I]) <> '') and (CompareText(Trim(Parts[I]), Entry) <> 0) then
begin
if NewPath <> '' then
NewPath := NewPath + ';';
NewPath := NewPath + Trim(Parts[I]);
end;
if NewPath <> PathValue then
begin
if NewPath = '' then
RegDeleteValue(Root, EnvironmentKey, PathValueName)
else
RegWriteExpandStringValue(Root, EnvironmentKey, PathValueName, NewPath);
end;
RegDeleteValue(Root, 'Software\dat-gpt\Installer', 'AddedDatPath');
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPostInstall) and WizardIsTaskSelected('addtopath') then
AddInstallPath();
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
RemoveInstallPath();
end;