我想在我的Inno Setup步骤中使用PowerShell(64位版本)ssPostInstall,但它总是打开32位PowerShell。
正如您在我的脚本中看到的,我的 Inno Setup 配置为 64 位应用程序。当我开始安装时,我可以在任务管理器中看到它正在作为 32 位应用程序运行
此外,将打开的 PowerShell 也处于 32 位模式。
这是我的 Inno Stup 脚本:
[Setup]
ArchitecturesAllowed=x64
ArchitecturesInstallIn64BitMode=x64
PrivilegesRequired=admin
[Code]
Procedure CurStepChanged(CurrentStep:TSetupStep);
var
i, ResultCode, ErrorCode: Integer;
findRec: TFindRec;
isInstallationCmdSuccessful: Boolean;
folderNameOfUpdateIni: String;
ReturnCode: Boolean;
begin
if CurrentStep = ssPostInstall then begin
Log('Starting post install steps, calling install.ps1');
ReturnCode := ShellExec('open', ExpandConstant('{sys}\WindowsPowerShell\v1.0\powershell.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);
if (ReturnCode = True) then
Log('post install returned true')
else
Log('post install returned false');
Log('Starting post install …Run Code Online (Sandbox Code Playgroud) 我正在尝试在单个设置中添加可重新分发的两种架构 [x32 和 x64] VC++ 2019 (v14.26.28720.03)。我编译成功,但在运行时出现异常ExtractTemporaryFile('#VcInstall');
;Version: v14.26.28720.03
[Setup]
#if arch == "x32"
#define VcInstall "VC_redist.x86.exe"
#else
#define VcInstall "VC_redist.x64.exe"
#endif
[Files]
Source: ".\Redist\{#VcInstall}"; DestDir: {tmp}; Flags: dontcopy
[Run]
Filename: "{tmp}\{#VcInstall}"; Parameters: "/q /norestart"; \
Check: VC2019RedistNeedsInstall; Flags: waituntilterminated; \
StatusMsg: "Installing VC++ 2019 redistributables..."
Run Code Online (Sandbox Code Playgroud)
;Version: v14.26.28720.03
[Setup]
#if arch == "x32"
#define VcInstall "VC_redist.x86.exe"
#else
#define VcInstall "VC_redist.x64.exe"
#endif
[Files]
Source: ".\Redist\{#VcInstall}"; DestDir: {tmp}; Flags: dontcopy
[Run]
Filename: "{tmp}\{#VcInstall}"; Parameters: "/q /norestart"; \
Check: VC2019RedistNeedsInstall; Flags: waituntilterminated; …Run Code Online (Sandbox Code Playgroud) 我添加了一个新页面 -CreateInputOptionPage
添加了一些选项。
wpWizardPage.Add('Option A');
wpWizardPage.Add('Option B');
wpWizardPage.Add('Option C');
Run Code Online (Sandbox Code Playgroud)
我想增加单选按钮列表的字体大小。
我感谢您能提供的任何帮助。
我正在尝试在PascalScript函数中使用TStrings.ValueFromIndex(在FreePascal和Delphi中工作),但它不起作用,编译器返回:
未知标识符'GETVALUEFROMINDEX'
我用得好吗?
PascalScript中是否提供此功能?
如果没有,有没有简单的方法呢?
代码:
Function dummy(R: TStringList):String;
var
i: Integer;
RESULTv: string;
begin
for i := 0 to ReqList.Count-1 do
RESULTv := RESULTv + R.Names[i]+' -> '+ R.ValueFromIndex[i];
dummy := RESULTv;
end;
Run Code Online (Sandbox Code Playgroud) 我在 PAscal 中遇到了问题。我想计算素数但没有结果:我的代码是:
Program arrayToFunction;
const
size = 5;
type
a = array [1..size] of integer;
var
aNumbers: a = (1, 7, 3, 4, 5);
iCountNumbers: integer;
function countPrimeNumbers( var arr: a) : integer;
var
i :0..size;
sum,j,count: integer;
begin
sum := 0;count:=0;
for i := 0 to size do
begin
for j := 2 to arr[i] do
begin
if(arr[i] mod j = 0) then sum:=1;
end;
if(sum=0) then count:=count+1;
end;
countPrimeNumbers := count;
end;
begin
iCountNumbers := countPrimeNumbers( aNumbers …Run Code Online (Sandbox Code Playgroud) 我想在像所有的页面的左下角,以创建一个新的关于按钮wpWelcome,wpSelectTasks,wpInstalling等; 如果单击它,它将显示一些消息。如果用户按“确定”,消息应关闭。该按钮应显示完整的“关于”一词,而不是“关于...” 我已经CodeClasses.iss在 Inno Setup 中检查过文件,但我不明白我应该复制哪些代码,哪些不应该。
我已经看过这两个帖子:
但它们并不是我真正想要的。
所以请任何人帮忙。
我需要TPanel根据我的wpInfoBefore向导页面中显示的用户当前的系统规格自动更改状态栏的颜色(它是一个)(变亮或变暗)。
我喜欢有两个函数可以通过输入 aTColor作为值来正确执行此操作。但是,我多次尝试通过阅读这样的帖子来编写这些函数,甚至使用RGB函数,但没有成功。
例如,如果我需要使给定的变暗或变亮TColor,我可能需要使用如下所示的函数:
var
RecommendedStatusColor: TColor;
function LightenColor(Colour: TColor, Percentage: Integer): TColor;
begin
...
end;
function DarkenColor(Colour: TColor, Percentage: Integer): TColor;
begin
...
end;
RecommendedStatusColor := $00D000;
if ... then
StatusBar.Color := LightenColor(RecommendedStatusColor, 75);
//Lighten given color by 75%
if ... then
StatusBar.Color := DarkenColor(RecommendedStatusColor, 50);
//Darken given color by 50%
Run Code Online (Sandbox Code Playgroud)
应修改输出(变亮或变暗)TColor.
提前致谢。
我想使用RemObject Pascal Scripter的另一个应用程序运行Delphi应用程序(使用表单vcl,表单等).
将RemObject Pascal Scripter支持delphi的所有领域,
如果是这样,我可以包括第三方VCL
如果没有,你可以建议我用表格和控件构建可解释的应用程序
我正在为旧游戏(Command&Conquer 1,Win95版本)制作补丁,在某些情况下,执行补丁需要通过Pascal脚本编写的函数,这可能需要一段时间.
目前,我在页面更改为"安装"页面时执行此操作,因此,在用户选择所有选项并确认安装之后,在安装程序开始实际添加(和删除)文件之前.
procedure CurPageChanged(CurPageID: Integer);
begin
if (CurPageID = wpInstalling) then
begin
// Rename all saveg_hi.### files to savegame.###
renameSaveGames();
// clean up the ginormous files mess left behind if the game was installed from the 'First Decade' compilation pack
cleanupTFD();
end;
end;
Run Code Online (Sandbox Code Playgroud)
但由于该过程可能相当长,我宁愿以某种方式将其添加到实际的安装进度条.有没有办法实现这个目标?
如果该软件已经安装了旧版本,我需要 Inno Setup 生成的安装程序来删除安装前的某些文件。
我尝试通过比较版本号(下面的自定义函数)来做到这一点,但是在编译时,Inno Setup 会生成错误:
[ISPP] 未声明的标识符:“GetInstalledVersion”。
Inno Setup 脚本相关摘录为:
(...)
[Code]
function GetInstalledVersion(MandatoryButNotUsedParam: String): String;
var Version: String;
begin
if RegValueExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+ExpandConstant('AppId')+'_is1', 'DisplayVersion') then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+ExpandConstant('AppId')+'_is1', 'DisplayVersion', Version);
MsgBox(ExpandConstant('Existing version:'+Version+' New version:'+ExpandConstant('AppVersion')), mbInformation, MB_OK);
Result := Version;
end
else
begin
Result := '';
end
end;
(...)
[InstallDelete]
#define InstalledAppVersion GetInstalledVersion('')
#if "1.013" > InstalledAppVersion
Type: files; Name: {userappdata}\xxx\*.hhd
#endif
Run Code Online (Sandbox Code Playgroud)
作为 Inno Setup 的新手,这当然是一个微不足道的问题,但在论坛上找不到答案。因此,问题是:如何GetInstalledVersion从该[InstallDelete]部分正确调用该函数?
是否存在问题,因为在读取节[InstallDelete]之前可能会调用节?[code]
非常感谢您的帮助/提示!
在pascal和delphi中,数组的长度存储在数组指针的内存中的某个偏移处.我发现以下代码适用于我,它获取数组的长度:
type PInt = ^Integer; //pointer to integer.
Function Length(Arr: PInt): Integer;
var
Ptr: PInt;
Begin
Ptr := Arr - sizeof(Integer);
Result := Ptr^ + 1;
End;
Function High(Arr: PInt): Integer; //equivalent to length - 1.
Begin
Result := (Arr - sizeof(Integer))^;
End;
Run Code Online (Sandbox Code Playgroud)
我将上面的代码翻译成C++,因此变为:
int Length(int* Arr)
{
int* Ptr = (Arr - sizeof(int));
return *reinterpret_cast<char*>(Ptr) + 1;
}
int High(int* Arr)
{
return *(Arr - sizeof(int));
}
Run Code Online (Sandbox Code Playgroud)
现在假设上面的等价于Pascal/Delphi版本,我如何编写一个表示Pascal数组的结构?
换句话说,我如何编写一个结构,以便满足以下条件:
Length(SomeStructPointer) = SomeStructPointer->size
我尝试了以下方法:
typedef struct
{
unsigned size;
int* …Run Code Online (Sandbox Code Playgroud) pascalscript ×11
inno-setup ×7
delphi ×3
freepascal ×2
32bit-64bit ×1
arrays ×1
c ×1
c++ ×1
installation ×1
installer ×1
pascal ×1
percentage ×1
progress-bar ×1
remobjects ×1
tcolor ×1
turbo-pascal ×1
windows ×1
wow64 ×1