标签: pascalscript

Inno Setup 始终在 Pascal Script 代码中以 32 位模式启动 PowerShell

我想在我的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)

windows installation inno-setup wow64 pascalscript

2
推荐指数
1
解决办法
1010
查看次数

如何在单个 Inno Setup 安装程序中添加 x86 和 x64 VC++ 2019 Redistributables?

我正在尝试在单个设置中添加可重新分发的两种架构 [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)

inno-setup 32bit-64bit pascalscript

2
推荐指数
1
解决办法
1787
查看次数

如何在 Inno Setup CreateInputOptionPage 上更改单选按钮的字体/增加字体大小

我添加了一个新页面 -CreateInputOptionPage 添加了一些选项。

wpWizardPage.Add('Option A');
wpWizardPage.Add('Option B');
wpWizardPage.Add('Option C');
Run Code Online (Sandbox Code Playgroud)

我想增加单选按钮列表的字体大小。

我感谢您能提供的任何帮助。

inno-setup pascalscript

2
推荐指数
1
解决办法
129
查看次数

TStringList ValueFromIndex在PascalScript中不起作用

我正在尝试在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)

delphi freepascal pascalscript

1
推荐指数
1
解决办法
1226
查看次数

在 Pascal 中计算数组中的素数

我在 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)

pascal freepascal pascalscript turbo-pascal

1
推荐指数
1
解决办法
1543
查看次数

如何在 Inno Setup 中创建新的关于按钮?

我想在像所有的页面的左下角,以创建一个新的关于按钮wpWelcomewpSelectTaskswpInstalling等; 如果单击它,它将显示一些消息。如果用户按“确定”,消息应关闭。该按钮应显示完整的“关于”一词,而不是“关于...” 我已经CodeClasses.iss在 Inno Setup 中检查过文件,但我不明白我应该复制哪些代码,哪些不应该。

我已经看过这两个帖子:

但它们并不是我真正想要的。

所以请任何人帮忙。

inno-setup pascalscript

1
推荐指数
1
解决办法
1583
查看次数

如何在 Inno Setup Pascal 脚本中变亮或变暗指定的 TColor?

我需要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.

提前致谢。

inno-setup percentage pascalscript tcolor

1
推荐指数
1
解决办法
1907
查看次数

RemObject Pascal Scripter中的Delphi应用程序

我想使用RemObject Pascal Scripter的另一个应用程序运行Delphi应用程序(使用表单vcl,表单等).

将RemObject Pascal Scripter支持delphi的所有领域,

如果是这样,我可以包括第三方VCL

如果没有,你可以建议我用表格和控件构建可解释的应用程序

delphi remobjects pascalscript

0
推荐指数
1
解决办法
658
查看次数

将功能执行添加到inno setup的安装程序进度中

我正在为旧游戏(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)

但由于该过程可能相当长,我宁愿以某种方式将其添加到实际的安装进度条.有没有办法实现这个目标?

installer inno-setup pascalscript progress-bar

0
推荐指数
1
解决办法
3402
查看次数

Inno Setup:如何从 InstallDelete 部分调用自定义函数

如果该软件已经安装了旧版本,我需要 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]

非常感谢您的帮助/提示!

inno-setup pascalscript

0
推荐指数
1
解决办法
3997
查看次数

Pascal和Delphi数组到C/C++数组

在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)

c c++ arrays delphi pascalscript

-1
推荐指数
2
解决办法
1273
查看次数