123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- ; -- 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;
|