标签: pascalscript

如何将字符串从 DLL 返回到 Inno Setup Pascal 脚本

我在 DLL 中有两个 C 函数,它们在定义文件中定义,并导出以在 Inno Setup 中使用。

char* __stdcall GetName()
{
        return "Kishore";
}
void __stdcall getName(char* strName)
{
     strcpy(strName, "Kishore");
}
Run Code Online (Sandbox Code Playgroud)

Inno Setup 代码将加载自定义 DLL 并调用函数/过程来返回名称

{ Inno Setup script }
[Code]
procedure  getName(MacAddress: String);
external 'getName@files:MyDll.dll stdcall setuponly';

function  GetName():PAnsiChar;
external 'GetName@files:MyDll.dll stdcall setuponly';

function NextButtonClick(CurPage: Integer): Boolean;
var
  StrName: String;
begin
  SetLength(StrName,15);    
  getName(StrName); { displaying only single character }
  StrName := GetName(); { this call is crashing }
end
Run Code Online (Sandbox Code Playgroud)

如何在 Inno Setup 脚本中检索名称而不崩溃?

dll inno-setup return-value pascalscript

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

Inno Setup 代码部分创建隐藏文件

我正在处理 Inno Setup 项目。SaveStringToFile该项目正在使用 部分中的函数写出一个文件[Code]。我想将此文件设置为隐藏系统文件,但我无法找到有关如何实现此操作的信息。有任何想法吗?

inno-setup pascalscript

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

在 Inno Setup 中终止 32 位 Windows 上的安装

我正在使用 Inno Setup。

\n\n

如果 Windows 版本是 32 位,有人可以告诉我如何终止安装吗?

\n\n

或者更具体地说,当安装开始时,代码会检查 Windows 版本是否为 32 位并显示警告,然后取消安装。

\n\n

完全终止安装程序的命令是什么\xe2\x80\x99?

\n\n

我正在使用以下过程

\n\n
procedure CheckWindows;\nbegin\n  if not IsWin64 then\n  begin\n    MsgBox(\'Error:The Windows version is 32bit\',mbError,MB_OK);\n    WizardForm.Close;\n  end;\nend;\n
Run Code Online (Sandbox Code Playgroud)\n\n

它确实给出了警告消息,但随后它允许用户根据需要继续。

\n\n

如何彻底终止安装?

\n

inno-setup pascalscript

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

如何获取 Inno Setup 安装程序 exe 文件中包含的文件版本(exe 和 dll)?

如题,有可能吗?而且,如果参数(例如传递给 exe 文件的参数)设置为 true,我想将它们显示在安装程序的一页上。

\n\n

我知道如何显示某些页面:

\n\n
if dev then\n    PageWersjePlikow :=\n        CreateOutputMsgMemoPage(\n            1, \'Wersje plik\xc3\xb3w zawarte w     instalatorze\',\n            \'Lista plik\xc3\xb3w niewidoczna dla klienta\',\n            \'Pliki:\', \'TU WPISA\xc4\x86 WERSJE PLIK\xc3\x93W\');\n
Run Code Online (Sandbox Code Playgroud)\n\n

我有一些想法,但每个想法都是基于编译 exe 安装程序时构建的 .txt 文件,然后从中读取......

\n

installation inno-setup pascalscript fileversioninfo

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

使用 Inno Setup 安装所有文件后运行的代码

我得到了以下小函数,在[Files]复制该部分的所有文件后需要调用它

procedure DllAfterInstall(platform: Integer);
begin
    if not installDriver(platform) then
                MsgBox(ExpandConstant('{cm:installDriverFail}'), mbError, MB_OK);
end;
Run Code Online (Sandbox Code Playgroud)

installDriver(platform)我的 dll 之一的外部函数在哪里。

一旦我尝试调用DllAfterInstall[Run]部分中的函数,例如

Filename: "{code:DllAfterInstall}"; Parameters: 0; Check: not IsWin64
Run Code Online (Sandbox Code Playgroud)

我收到错误

“DllAfterInstall”的原型无效

那么谁能告诉我我做错了什么?或者也许有另一种方法可以*.dll在复制所有文件后调用 a ?该*.dll函数只能被调用一次,所以AfterInstall没有选择。

inno-setup pascalscript

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

Inno Setup ComponentsList OnClick 事件

我有一个 Inno Setup 安装程序的组件列表,有 19 个不同的选项,我想OnClick其中一个组件设置事件。有没有办法做到这一点?OnClick或者如果为所有组件设置了事件,是否有方法检查哪个组件触发了事件?

目前,该OnClick事件设置如下:

Wizardform.ComponentsList.OnClick := @CheckChange;
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

Wizardform.ComponentsList.Items[x].OnClick := @DbCheckChange;
Run Code Online (Sandbox Code Playgroud)

WizardForm.ComponentList声明为:TNewCheckListBox

delphi inno-setup pascalscript

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

Inno Setup:卸载期间从安装程序读取文件

卸载时使用以下代码

BitmapImage := TBitmapImage.Create(InstallTopPanel);
BitmapImage.AutoSize := True;
BitmapImage.Bitmap.LoadFromFile(
  ExpandConstant( '{tmp}\WizardSmallImageFile.bmp') );
BitmapImage.Parent := InstallTopPanel;
BitmapImage.Top := (InstallTopPanel.ClientHeight - 58) / 2;
BitmapImage.Left := InstallTopPanel.ClientWidth - 55 - 10;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

异常:无法打开文件。C:\users\xyz\AppData\Local\Temp\is-U3Q8P.tmp\WizardSmallImageFile.Bmp。文件未找到。

我还尝试ExtractTemporaryFile在调用之前使用LoadFromFile卸载过程中不支持的功能。

ExtractTemporaryFile('WizardSmallImageFile.bmp');
Run Code Online (Sandbox Code Playgroud)

那么问题来了,如何查看图像或特别WizardSmallImageFile是在卸载过程中?

我上面的代码构建了一个带有自定义面板的自定义表单。就像这里:Inno Setup 仅卸载一些组件

inno-setup pascalscript

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

在Inno Setup Pascal脚本中读取UTF-16文件

我有一个.inf从 Resource Hacker 导出的文件。该文件采用 UTF-16 LE 编码。

EXTRALARGELEGENDSII_INI TEXTFILE "Data.bin"

LARGEFONTSLEGENDSII_INI TEXTFILE "Data_2.bin"

NORMALLEGENDSII_INI TEXTFILE "Data_3.bin"

THEMES_INI TEXTFILE "Data_4.bin" 
Run Code Online (Sandbox Code Playgroud)

当我使用该LoadStringFromFile函数加载它时:

EXTRALARGELEGENDSII_INI TEXTFILE "Data.bin"

LARGEFONTSLEGENDSII_INI TEXTFILE "Data_2.bin"

NORMALLEGENDSII_INI TEXTFILE "Data_3.bin"

THEMES_INI TEXTFILE "Data_4.bin" 
Run Code Online (Sandbox Code Playgroud)

我在调试输出中得到这个:

E
Run Code Online (Sandbox Code Playgroud)

请告诉我如何解决这个问题。

提前致谢。

inno-setup utf-16 pascalscript

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

如何在 [Code] 部分使用 Inno Setup 预处理器指令?

我觉得这一定是我所缺少的一些简单的东西 - 在 Inno Setup 中,如果我传入了指令变量,我如何在该[Code]部分中使用它?

假设我传入/DMYVAR=1Inno Setup 引擎。

在我的 .iss 文件中,我可以有类似的内容:

[Setup]
AppName=MyApp v{#MYVAR}
Run Code Online (Sandbox Code Playgroud)

在我的部分中,[Code]我希望能够像这样使用它:

[Setup]
AppName=MyApp v{#MYVAR}
Run Code Online (Sandbox Code Playgroud)

这不起作用:(

inno-setup pascalscript

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

将打印按钮添加到 Inno Setup 中的许可证页面(Inno Setup 6 重新访问)

这是一个标准 RTF 文档,用于Inno Setup 部分LicenseFile中的属性:[Setup]

在此输入图像描述

是否可以在此页面添加一个打印按钮来触发打印许可协议?


我看到了一个类似的问题和答案(在 Inno Setup 中的许可证页面中添加“打印协议”按钮),我刚刚尝试实现。但这就是我得到的:

在此输入图像描述

该按钮位于错误的位置,因此此代码似乎与 Inno Setup 6 不完全兼容?

所以,在我的脚本中我有:

[Setup]
LicenseFile=..\..\..\EULA\EULA.rtf

[Code]
var PrintButton: TButton;

procedure PrintButtonClick(Sender: TObject);
var ResultCode :integer;
begin
    log('test');
    ExtractTemporaryFile('EULA.rtf');
    //if not ShellExec('Print', ExpandConstant('{tmp}\EULA.rtf'),
    //     '', '', SW_SHOW, ewNoWait, ResultCode) then
    if not ShellExec('', ExpandConstant('{tmp}\EULA.rtf'),
         '', '', SW_SHOW, ewNoWait, ResultCode) then
    log('test');
end;

procedure InitializeWizard();
begin
    PrintButton := TButton.Create(WizardForm);
    PrintButton.Caption := '&Print...';
    PrintButton.Left := WizardForm.InfoAfterPage.Left + 96;
    PrintButton.Top := WizardForm.InfoAfterPage.Height + 88;
    PrintButton.OnClick := …
Run Code Online (Sandbox Code Playgroud)

inno-setup pascalscript

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