问题标签 [pascalscript]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1884 浏览

xml - 在 inno Setup 中使用 DOM 将节点添加到 xml - 奇怪的问题

非常奇怪的问题:我使用 DOM 来编辑一个 xml 文件(一个需要与我们交互的应用程序的 .exe.config 文件),但是看到我必须批量添加几个类似的部分,我做了一个函数来插入整个需要的块。

调用此函数一次可以完美运行。之后使用不同的参数再次调用它会产生异常(参见代码下方的说明)。

编码:

最初,UpdateConfig函数是这样完成的:

此代码第一次运行良好,但第二setAttribute. AddAssemblyBinding它变得更加奇怪......当我删除将属性设置为 assemblyIdentityNode 的三行时,其余代码对于其他节点运行良好。

我能想象的唯一相关的是,这些是我在HasNode函数中查询的节点,以查看块是否已经存在。DOM 不能通过未保存的更改处理查询吗?所以我编辑了代码以提前进行存在性检查并将结果存储在布尔值中,因为我认为问题可能是在修改后的树上寻找节点。但是现在它给出了一个关于尝试将节点嵌套在自身或它自己的子节点下的错误(“msxml3.dll:不允许在自身下插入节点或其祖先”),就dependentAssemblyNode.appendChild(bindingRedirectNode);行了。这些错误都没有任何意义。

我似乎越来越喜欢它了。EnsureXPath,在必须添加节点的情况下第二次使用时,也会出现非法嵌套错误。我感觉不知何故,该对象在某处神秘地变为空,并且该空被视为处理节点对象的函数中的根节点。

有谁知道可能导致这种行为的原因?

我正在编辑的 XML 通常如下所示:

(还有更多这些dependentAssembly 部分......但这并不重要)

0 投票
1 回答
1248 浏览

inno-setup - 使用共享文件正确显示组件大小

我有一个 inno 设置项目,其中包括 5 个不同的子程序,可作为组件安装。最终程序文件夹中的许多 dll 在其中一些(但不是全部)之间共享。我制作了一个工具来整理常见的 dll,以使我的安装程序尽可能紧凑。

由于共享部件,这些组件的空间需求根本不会出现。就其本身而言,这并不是一个真正的问题,但组件选择器底部的总大小似乎只结合了为所有组件安装的文件,以及可以计算大小的组件的大小。

虽然由于共享文件而无法显示单个大小,但总大小是完全可以确定的。是否有可能以某种方式给用户一个正确的总大小估计?

在相关说明中......是否有一种简单的方法可以确保至少需要选择一个组件?简单地将 Components: 添加到 Files 中的每一行都不起作用。NextButtonClick在检查所有组件后,我目前只有一个错误框IsComponentSelected,但我想知道是否有更...​​优雅的解决方案,因为如果我需要添加更多组件(在当前项目中,这需要修改代码) ,是一种非常现实的可能性)。

0 投票
1 回答
1139 浏览

inno-setup - 如何使用 tskill 杀死具有长名称的进程?

(为未来/其他人回答我自己的问题)。

我有一个我想按名称杀死的进程(在我的例子中,来自 Pascal 脚本的 InnoSetup)。我的问题是我的进程被称为 MyVeryLongProcessName.exe 并且我无权访问 taskkill(只是 tskill)。

在这种情况下,在 Windows XP(嵌入式)上,我尝试了以下结果:

但是,如果我重命名该进程(并试图杀死它)它工作正常:

我的问题是/是:如何使用 tskill 杀死具有长进程名称的进程?

0 投票
2 回答
4401 浏览

inno-setup - Inno Setup Script - 安装前运行 exe

我想在安装之前运行一个应用程序,我在 Inno Setup Script(Pascal) 上使用这个代码:

当我使用“{win}\notepad.exe”时,它可以工作,但是当我使用“{src}\MyFolder\Injector.exe”时,安装程​​序不会打开我的程序并继续安装。

注意:Injector 有 app.manifest,其中有 'requireAdministrator'。但是,此应用程序应以管理员身份运行。

那么有什么问题呢?

0 投票
2 回答
1377 浏览

delphi - 在 RemObjects Pascal 脚本 (Delphi) 中加载预编译脚本

我正在尝试在运行时在 Delphi 中加载预先编译的 RemObjects Pascal 脚本。但是,当我尝试加载它时,Delphi 会出现“无法导入 VALUE_TEAMCODE”。 Value_TeamCode是我已经使用 Pascal 脚本注册的 Delphi 应用程序中的一个函数。

这就是我正在做的事情。下面的粗略伪代码 - 实际代码被拆分为多个文件。SetCompiled当脚本需要运行时,下面的调用也会在应用程序中发生得更晚。

关于代码的注意事项: FPascalScriptTPSScriptDebugger

也许我正在处理这个错误。我不确定是否甚至可以加载预编译的脚本。

我在 RemObjects WebSite Wiki 上进行了搜索,但 Pascal 脚本帮助已被删除。我还在 StackOverflow 上搜索了各种主题,但似乎没有一个与这个问题有关。

只是另一个注释。我已经有脚本在运行时编译和执行,没有任何问题。出于性能原因,我需要预编译。

任何帮助表示赞赏。

更新:

当前的解决方法是在我的系统中为每个脚本设置一个脚本引擎。这些引擎在预编译后保留在内存中。这消除了我原本拥有的每个脚本编译开销 30 毫秒。它还使用更多的内存,但不足以引起关注。

我仍然宁愿只使用一个脚本引擎。(因此需要加载预编译的脚本)

0 投票
2 回答
429 浏览

inno-setup - 在运行设置时获取代码部分中的文件名作为输入?

我正在使用 Inno setup 来创建自定义安装程序,我需要它来向我的安装程序添加一些东西。通过这段代码,我可以找到文件的最后修改日期,但我想在运行设置时将文件名作为输入。看这里

GetFileAttributesEx('C:\Users\Gangadhar\Desktop\white_plain.gif', GetFileExInfoStandard , FileInformation);

在此函数中,我将文件名作为参数传递。我想在运行设置时选择此文件名,就像选择目标文件夹向导一样,然后将选定的文件名作为参数传递给上述函数。

任何帮助,将不胜感激。提前致谢

0 投票
2 回答
3178 浏览

json - PascalScript 中的 JSON 解析器

是否有用标准的程序 Pascal 编写的 JSON 解析器?Delphi 中有几个面向对象的实现,但我需要在PascalScript中进行解析,不幸的是,不能在 PascalScript 中声明类。

将来我会将 JSON 解析器添加到 Delphi 主机应用程序中,JSON 解析将成为其 PascalScript API 的一部分,但我现在需要一些可以直接从 PascalScript 运行的东西。

谢谢!

=== 更新 ===

还有一个问题:PascalScript 不能处理指针。所以我应该说我需要的是一个 JSON 解析器,不是在 Pascal 中,而是在 PascalScript 中(我相应地更改了问题的标题)。

0 投票
1 回答
1216 浏览

iis-7 - 无法将类型(未知)的变体转换为类型(调度)

我正在尝试将以下 javascript 代码移植到 inno-setup pascal 脚本:

这段代码被翻译成这样:

但它在线引发以下错误AppPoolsCollection := AppPoolsSection.Collection

我可以做些什么来告知 pascal scritp 该AppPoolsSection对象是 anIDispach而不仅仅是 an IUnknown?

0 投票
1 回答
1101 浏览

windows-installer - 如何使用 InstallShield 升级代码 GUID 在 Inno Setup 中卸载相关产品

我们公司已从使用 InstallShield Express 切换到使用 Inno Setup(5.5.2 版本)。我们已经使用 InstallShield 进行了多年的旧安装,但始终依赖 InstallShield 的升级代码 GUID 来处理先前版本的卸载。

我需要能够从我们新的 Inno Setup 安装程序中卸载任何以前安装的 InstallShield 版本。

经过一番研究,我似乎需要调用 MsiEnumRelatedProducts() 然后卸载任何找到的产品。

我找到了这个链接http://www.microsofttranslator.com/bv.aspx?from=de&to=en&a=http%3A%2F%2Fwww.inno-setup.de%2Fshowthread.php%3Fs%3D415e3895fda3e26e42739b004c0f51fb%26t%3D2857(德语原文http://www.inno-setup.de/showthread.php?s=415e3895fda3e26e42739b004c0f51fb&t=2857)。看起来他已经很接近了,但他从未发布过他的最终解决方案。

他说的代码有效(但对我来说崩溃了):

他说这样更容易?

我是 Pascal 脚本的新手,我陷入了整个 SetLength() 部分。它在他所说的有效但崩溃的功能中取代了什么?

既然其他人说要切换到字符串,我应该摆脱这个:

如果有人能用英语给我看一个最终的工作函数,那就太棒了!!!

提前致谢!

编辑:我正在使用 Inno Setup Compiler 的 ANSI 版本。

0 投票
0 回答
360 浏览

delphi - 在 Pascal 脚本上使用接口

我正在尝试在 REM Objects Pascal 脚本上使用接口并遇到一些困难。

我的应用程序有一个 TXMLDocument 类型的变量,我将它暴露给我的脚本。虽然我可以编译我的测试脚本,但问题是要让它们正常运行。

当我运行我的脚本时工作正常,但是

不能正常工作,即尝试访问任何接口引用都是有问题的。DocumentElement 应该产生一个 IXMLNode,但我得到一个 AV(例外:模块“Flow.exe”中地址 0040820C 的访问冲突。读取地址 00000000)并且基本上没有其他工作。

Pascal 脚本是否正确支持接口对象或者我做错了什么?