Inno-Setup-issrc/Examples/PowerShell.iss
Martijn Laan 89080dfe78
Cleanup.
2024-07-31 08:54:43 +02:00

87 lines
2.9 KiB
Plaintext

; -- PowerShell.iss --
; Demonstrates calling Powershell at compile time and at run time.
; At compile time it first generates a random password and then it shows it and copies it to the clipboard.
; At run time it shows the serial number of the system.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!
#define PowerShellExe "powershell.exe"
#define PowerShellCommandParam "-ExecutionPolicy Bypass -Command"
#define ExecPowerShell(str Command) \
Local[0] = PowerShellCommandParam + " " + AddQuotes(Command), \
Message("Executing PowerShell command: " + Local[0]), \
ExecAndGetFirstLine(PowerShellExe, Local[0])
#define Password ExecPowerShell( \
"Add-Type -AssemblyName 'System.Web';" + \
"[System.Web.Security.Membership]::GeneratePassword(12, 4);")
#expr ExecPowerShell( \
"$Password = '" + Password + "';" + \
"Set-Clipboard -Value $Password;" + \
"Add-Type -AssemblyName System.Windows.Forms;" + \
"[System.Windows.Forms.MessageBox]::Show(" + \
"'The generated password (copied to clipboard) is: ' + $Password + '" + NewLine + NewLine + \
"Click OK to continue.', 'ISPP')")
[Setup]
AppName=My Program
AppVersion=1.5
WizardStyle=modern
DefaultDirName={autopf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
Compression=lzma2
SolidCompression=yes
OutputDir=userdocs:Inno Setup Examples Output
Password={#Password}
[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
[Code]
var
Line: String;
procedure ExecAndGetFirstLineLog(const S: String; const Error, FirstLine: Boolean);
begin
if not Error and (Line = '') and (Trim(S) <> '') then
Line := S; { First non-empty line found, store it }
Log('Exec output: ' + S);
end;
function ExecAndGetFirstLine(const Filename, Params, WorkingDir: String; var ResultCode: Integer): String;
begin
Line := '';
try
ExecAndLogOutput(Filename, Params, WorkingDir, SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode, @ExecAndGetFirstLineLog);
except
Log(GetExceptionMessage);
end;
Result := Line;
end;
function ExecPowerShell(const Command: String): String;
var
FullCommand: String;
ResultCode: Integer;
begin
FullCommand := '{#PowerShellCommandParam} ' + AddQuotes(Command);
Log('Executing PowerShell command: ' + FullCommand);
Result := ExecAndGetFirstLine('{#PowerShellExe}', FullCommand, '', ResultCode);
end;
function InitializeSetup: Boolean;
var
SerialNumber: String;
begin
SerialNumber := ExecPowerShell('Get-WmiObject -Class Win32_BIOS | Select-Object -ExpandProperty SerialNumber');
MsgBox(Format('Serial number: %s'#10#10'Click OK to continue.', [SerialNumber]), mbInformation, MB_OK);
Result := True;
end;