当前位置: 首页 > 知识库问答 >
问题:

install4j:stderr和返回代码重定向变量只写入一次

云和惬
2023-03-14

我正在使用Install4j 6.1.6,并尝试执行以下操作:

我想用来自安装程序的参数在外部运行一个jar文件(第一个屏幕),然后在第二个屏幕上显示结果。

    null
    null

所以我在第一个屏幕上的“运行可执行文件或批处理文件”操作上选中了“可以多次执行”。

现在,当我在输入字段中输入错误数据时,单击Next>脚本将运行并失败,第二个屏幕将显示有错误。my-returncode和my-stderr包含退出代码和错误消息。

然后我单击 按钮并修复问题,我单击 next>然后这次脚本成功运行,但是我仍然得到前面的错误,因为my-returncode和my-stderr没有更新,它们仍然包含最后的错误消息和退出代码!

我已经意识到第二个动作(转到下一个屏幕)是完全没有必要的,所以我删除了它。

这仍然没有解决我的问题,下面是.install4j/installation.txt中的相关部分:

[INFO] com.install4j.runtime.beans.screens.FormScreen [ID 1199]: Show screen
       Variable changed: shouldLaunchExternalScript=true[class java.lang.String]
       Variable changed: externalScriptDataFolder=F:\badfolderpath[class java.lang.String]

这是用户可以选择启动此外部脚本并设置数据文件夹的屏幕。我点击了“启动脚本”单选按钮,设置了一个错误的文件夹路径。

[INFO] com.install4j.runtime.beans.actions.misc.RunExecutableAction [ID 1367]: Execute action
       Property arguments: [-cp, ./*, -Ddata.dir=F:\badfolderpath, ...]
       Property rollbackSupported: false
       Property returnCodeVariable: my-returncode
       Property stdoutRedirectionMode: No redirection
       Property stdoutVariableName: 
       Property workingDirectory: ...
       Property failOnStderrFileError: false
       Property failOnStdinFileError: false
       Property failOnStdoutFileError: false
       Property rollbackExecutable: null
       Property rollbackArguments: null
       Property rollbackWorkingDirectory: null
       Property stderrRedirectionMode: To installer variable
       Property stderrVariableName: my-stderr
       Property stdinRedirectionMode: No redirection
       Property environmentVariables: {}
       Property keepConsoleWindow: true
       Property showWindowsConsole: false
       Property useRollbackExecutable: false
       Property includeParentEnvironmentVariables: true
       Property stdinString: 
       Property timeout: 0
       Property stdinFile: null
       Property stderrFile: null
       Property stdoutFile: null
       Property wait: true
       Property waitForStreams: true
       Property executable: c:\users\user\appdata\local\temp\e4jb23d.tmp_dir1564671223\jre\bin\java
       Property logArguments: true
       used working dir: ...
       execute using batch file
[ERROR] com.install4j.runtime.beans.actions.misc.RunExecutableAction [ID 1367]: return value is 1
[INFO] com.install4j.runtime.beans.actions.misc.RunExecutableAction [ID 1367]: Variable changed: my-stderr
       Variable changed: my-returncode=1[class java.lang.Integer]
[ERROR] com.install4j.runtime.beans.actions.misc.RunExecutableAction [ID 1367]: return value is 1
        Execute action not successful after 19696 ms
[INFO] com.install4j.runtime.beans.screens.FormScreen [ID 1199]: command: move 1 screens, executing actions, checking condition
[INFO] com.install4j.runtime.beans.screens.FormScreen [ID 1360]: Show screen
[INFO] com.install4j.runtime.beans.screens.FormScreen [ID 1360]: command: go back 1 screens using history
[INFO] com.install4j.runtime.beans.screens.FormScreen [ID 1199]: Show screen
       Variable changed: shouldLaunchExternalScript=true[class java.lang.String]
       Variable changed: externalScriptDataFolder=F:\goodfolderpath[class java.lang.String]
[INFO] com.install4j.runtime.beans.actions.misc.RunExecutableAction: Execute action
       Property arguments: [-cp, ./*, -Ddata.dir=F:\goodfolderpath, ...]
       Property rollbackSupported: false
       Property includeParentEnvironmentVariables: true
       Property stderrFile: null
       Property executable: c:\users\user\appdata\local\temp\e4jb23d.tmp_dir1564671223\jre\bin\java
       Property stdinString: 
       Property wait: true
       Property stdinFile: null
       Property stdoutFile: null
       Property waitForStreams: true
       Property logArguments: true
       Property timeout: 0
       Property stderrVariableName: my-stderr
       Property stdinRedirectionMode: No redirection
       Property rollbackArguments: null
       Property stdoutRedirectionMode: No redirection
       Property rollbackWorkingDirectory: null
       Property workingDirectory: ...
       Property stdoutVariableName: 
       Property environmentVariables: {}
       Property returnCodeVariable: my-returncode
       Property rollbackExecutable: null
       Property stderrRedirectionMode: To installer variable
       Property useRollbackExecutable: false
       Property failOnStdinFileError: false
       Property failOnStdoutFileError: false
       Property failOnStderrFileError: false
       Property showWindowsConsole: false
       Property keepConsoleWindow: true
       used working dir: ...
       execute using batch file
       Variable changed: my-stderr
       Variable changed: my-returncode=0[class java.lang.Integer]
       Execute action successful after 16416 ms

脚本成功运行,变量被更改(my-returncode是1,现在是0)。

[INFO] com.install4j.runtime.beans.screens.FormScreen [ID 1199]: command: move 1 screens, executing actions, checking condition
[INFO] com.install4j.runtime.beans.screens.FormScreen [ID 1360]: Show screen

但是,在结果屏幕上,我仍然看到未更新的、以前的my-stderr和my-returncode值,表示运行外部脚本时出错。


共有1个答案

罗鸿畴
2023-03-14

我可以通过在第二个屏幕的预激活脚本中添加这一行来解决这个问题:

formEnvironment.reinitializeFormComponents();
 类似资料:
  • 页面跳转 操作完成后,成功或失败页面跳转可以使用 控制器基类的success,error方法: success方法 /** * 操作成功跳转的快捷方法 * @access protected * @param mixed $msg 提示信息 * @param string $url 跳转的URL地址 * @param mixe

  • 页面跳转 操作完成后,成功或失败页面跳转可以使用 控制器基类的success,error方法: success方法 /** * 操作成功跳转的快捷方法 * @access protected * @param mixed $msg 提示信息 * @param string $url 跳转的URL地址 * @param mixe

  • 我试图用apache 2.4配置PHP,每次我运行localhost/phpinfo.php,它都会向我显示代码。 使用的浏览器:apache服务器http pd conf文件中的chrome更改:LoadMoulesphp7_module"C:/php/php7apache2_4.dll"addHandler应用程序/x-http pd-php. php PHPIniDir"c:/php" ph

  • 问题内容: 服务器PHP升级后,Apache 2.0上的PHP版本5.6.2出现以下错误 我怎样才能解决这个问题? 问题答案: 编辑文件名:core / Common.php,行号:257 之前 后 由NikiC添加 在PHP赋值表达式中,始终返回赋值。因此$ _config [0] =&$ config返回$ config- 但不是变量本身,而是其值的副本。并且返回对临时值的引用不是特别有用(更

  • 我有一个带有私有属性的类,它是一个向量。做getter函数的最佳方法是什么? 返回整个向量:

  • 像 while, until, 和 for 循环代码块, 甚至 if/then 测试结构的代码块都能做到标准输入的重定向. 即使函数也可以使用这种重定向的格式 (参考例子 23-11).所有的这些依靠代码块结尾的<操作符来做到. 例子 16-5. while循环的重定向 1 #!/bin/bash 2 # redir2.sh 3 4 if [ -z "$1" ] 5