标签: pascalscript

在 Inno Setup 中提取存档时显示自定义状态消息

我的应用程序有一个安装文件,它还包含 .exe 文件和 .zip 文件。

我想要的是:

最近我在从zip中提取文件的部分添加了一段代码[Code],但实际上,它是在安装完成后发生的,并且进度条为100%,所以我想要的是使该代码的(解压缩)过程与进度条并向用户显示当前正在提取的内容。

例如:假设提取文件将占用进度条的 50%,其余部分将占用解压缩时的代码部分,以及当前正在提取的内容的状态。

这是代码:

[Code]
 
procedure InitializeWizard;
begin
  ForceDirectories(ExpandConstant('{localappdata}\folder-A\app\folder-B'))
end;
 
const
  SHCONTCH_NOPROGRESSBOX = 4;
  SHCONTCH_RESPONDYESTOALL = 16;
 
procedure unzip(ZipFile, TargetFldr: variant);
var
  shellobj: variant;
  SrcFldr, DestFldr: variant;
  shellfldritems: variant;
begin
  if FileExists(ZipFile) then begin
    if not DirExists(TargetFldr) then 
      if not ForceDirectories(TargetFldr) then begin
        MsgBox('Can not create folder '+TargetFldr+' !!', mbError, MB_OK);
        Exit;
      end;    
 
  shellobj := CreateOleObject('Shell.Application');
  SrcFldr := shellobj.NameSpace(ZipFile);
  DestFldr := shellobj.NameSpace(TargetFldr);
  shellfldritems := SrcFldr.Items;
  DestFldr.CopyHere(
    shellfldritems, SHCONTCH_NOPROGRESSBOX or SHCONTCH_RESPONDYESTOALL);
end;
 
procedure …
Run Code Online (Sandbox Code Playgroud)

inno-setup pascalscript

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

Inno Setup中的函数指针

Inno Setup是否支持函数指针?我在文档中找不到任何内容.我知道Delphi/Pascal支持它们,因为Inno Setup脚本引擎是基于它的,我希望它得到支持.

installer inno-setup pascalscript

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

从Inno Setup检查Windows版本时出现问题

我的程序安装了一个驱动程序,它有针对XP,Win2003,Vista/Win2008和Win7编译的不同版本.我使用pascal函数来检查哪个是OS,并安装相应的DLL.

在某些用户的系统上没有安装DLL,这意味着所有函数都返回false.只要操作系统的主要版本是5或6,就不会发生这种情况.

任何人都可以告诉我,我使用的代码是否有问题?

[Code]
function UseDriverForWindows7(): Boolean;
var
  Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);

  // Windows 7 version is 6.1 (workstation)
  if (Version.Major = 6)  and
     (Version.Minor = 1) and
     (Version.ProductType = VER_NT_WORKSTATION)
  then
    Result := True
  else
    Result := False;
end;

function UseDriverForWindowsVistaAndWindows2008(): Boolean;
var
  Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);

  // Anything with major version 6 where we won't use Windows 7 driver
  if (Version.Major = 6) and
     (not UseDriverForWindows7)
  then
    Result := True
  else
    Result := False;
end;

function UseDriverForWindows2003(): Boolean; …
Run Code Online (Sandbox Code Playgroud)

inno-setup windowsversion pascalscript

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

通过InnoSetup中的脚本访问文件列表

有没有办法在运行安装程序时从PascalScript访问文件列表([Files]部分中的条目)?我们试图直接从设置中运行应用程序,而不是必须安装它,这样可以更容易地维护文件列表.

inno-setup pascalscript

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

Inno Setup WizardImageFile 在 Windows 7 上的字体缩放看起来很糟糕

Inno Setup WizardImageFile(和WizardSmallImageFile)的位图看起来很糟糕,因为当 Windows 7 启用了大系统字体时,向导会比平时大,但图像的缩放比例非常错误。

有解决办法吗?

如果我在这样的地方添加自己的图片,就没有类似的问题:

BitmapImage1.AutoSize := True;
BitmapImage1.Align := alClient;
BitmapImage1.Left := 0;
BitmapImage1.Top := 0;
BitmapImage1.stretch := True;
BitmapImage1.Parent := Splash;
Run Code Online (Sandbox Code Playgroud)

inno-setup pascalscript dpi-aware

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

你能在Inno Setup中定义一个函数原型吗?

我希望能够为我的Inno Setup项目构建我的代码,但是我被迫移动代码,因为除非先定义函数,否则无法调用函数.

有没有办法在顶部声明一个原型,以便我没有得到"未知标识符"错误,以便我可以在逻辑块中构建我的代码.

inno-setup pascalscript

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

如何在Inno Setup中最小化安装程序?

我在Inno Setup中创建了自己的自定义最小化按钮。

我想知道如何在单击时最小化安装程序。

最小化应该类似于安装程序边框上的默认最小化按钮。

inno-setup pascalscript

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

如何确定是否使用Inno Setup安装了特定的Windows Update软件包(KB*.msu)?

我想知道如何确定目标机器中是否安装了特定的Windows Update软件包,例如名称为KB2919355的Windows Update软件包.

是否存在内置功能来检查?如果没有,那么确定它所需的代码是什么?也许搞乱注册表,或者可能是最干净和/或最安全的方式?

伪代码:

[Setup]
...

[Files]
Source: {app}\*; DestDir: {app}; Check: IsPackageInstalled('KB2919355')

[Code]
function IsPackageInstalled(packageName): Boolean;
  begin
    ...
    Result := ...;
  end;
Run Code Online (Sandbox Code Playgroud)

windows installer inno-setup pascalscript

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

Inno Setup-具有依赖项的外部.NET DLL

我试图在安装过程中在Inno Setup脚本中使用自定义DLL。我编写了一个非常简单的函数,该函数基本上使用MySQL .NET连接器检查MySQL数据库的连接字符串(目标服务器上没有MySQL客户端)。此导出函数的代码为:

public class DbChecker
{
    [DllExport("CheckConnexion", CallingConvention.StdCall)]
    public static int CheckConnexion([MarshalAs(UnmanagedType.LPStr)] string connexionString)
    {
        int success;
        try
        {
            MySqlConnection connection = new MySqlConnection(connexionString);
            connection.Open();
            connection.Close();
            success = 0;
        }
        catch (Exception)
        {
            success = 1;
        }
        return success;
    }
}
Run Code Online (Sandbox Code Playgroud)

该函数以这种方式导入Inno Setup中:

[Files]
Source: "..\..\MyDll\bin\x86\Release\*"; Flags: dontcopy;
Run Code Online (Sandbox Code Playgroud)

[Code]
function CheckConnexion(connexionString: AnsiString): Integer;
external 'CheckConnexion@files:MyDll.dll,MySql.Data.dll stdcall setuponly loadwithalteredsearchpath';`
Run Code Online (Sandbox Code Playgroud)

问题是安装程序在运行时引发异常:

运行时错误(位于53:207):

外部异常E0434352。

我认为我必须使用files前缀,因为在将NextButtonClick文件复制到{app}目录之前,在事件处理程序中调用了该函数。

两者MyDll.dllMySql.Data.dll{tmp}在运行时正确提取到目录中。

我尝试了带有和不loadwithalteredsearchpath带有标志的结果相同。 …

.net c# dll inno-setup pascalscript

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

在 Inno Setup Pascal 脚本中声明变量

我已将以下代码添加到我的脚本中:

[Code]
function IsSomeAppInstalled: Boolean;
begin
  Result := FileExists(ExpandConstant('{pf32}\SomeApp\Some.dll'));
end;

function InitializeSetup(): Boolean;
begin
   Boolean bIsInstalled := IsSomeAppInstalled();
   MsgBox('IsSomeAppInstalled: ' + IntToStr(Integer(bIsInstalled)),
     mbInformation, MB_OK);
   Result := true;
end;
Run Code Online (Sandbox Code Playgroud)

线

Boolean bIsInstalled := IsSomeAppInstalled();
Run Code Online (Sandbox Code Playgroud)

引发错误

内部错误 (20)

这里可能是什么错误?

inno-setup pascalscript

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

标签 统计

inno-setup ×10

pascalscript ×10

installer ×2

.net ×1

c# ×1

dll ×1

dpi-aware ×1

windows ×1

windowsversion ×1