【问题标题】:How to run QuickTime-associated file from NSIS installer?如何从 NSIS 安装程序运行 QuickTime 相关文件?
【发布时间】:2011-11-16 01:06:14
【问题描述】:

我们要求用户在他们的 jre/lib/ext 文件夹中拥有 QTJava.zip 的副本,这样我们就可以播放 QuickTime 文件而无需添加到类路径中。 QuickTime 在这里提供了一个安装过程:http://commons.oreilly.com/wiki/index.php/QuickTime_for_Java:_A_Developer%27s_Notebook/Getting_Up_and_Running_with_QuickTime_for_Java(参见标记为预检 QTJ 安装的部分)所以基本上我们需要从安装程序中运行一个与 QT 相关的文件 - 因为 QT 已经安装后,它只会在“.mov”文件运行时启动电影播放器​​。

我们有一个选择对话框,用户可以在其中选择他的 JRE,并且我们希望在此步骤之后提示用户立即运行此安装程序(假设 QTJava 不存在;我们会对此进行检查)。假设“.mov”文件位于基本安装程序文件夹中,“运行”该文件涉及哪些步骤?到目前为止没有任何效果,并且列出我们尝试过的每种方法都会占用页面,因此全新的观点会有所帮助。

【问题讨论】:

  • 为什么要求用户拥有 QTJava.zip 才能播放 .mov? QuickTime 可以安装在系统上,但 JRE 可能没有 QTJava.zip;可以安装其他可以播放.mov文件的播放器……你到底想达到什么目的?
  • 我们使用 QTJava 播放应用程序中的文件,因此该位置需要存在于类路径中。用户安装了哪些其他应用程序对我们来说并不重要,因为我们需要 QTJ 才能播放 QT 文件。
  • 那么想在你的应用程序中播放一个.mov 文件,对吗?那么这个问题与安装程序无关(您似乎已经解决了那部分),您应该阅读QTJava API文档

标签: installation executable nsis quicktime


【解决方案1】:

运行非 .exe/.cmd/.bat 文件需要 ExecShell。 ExecShell 与您将获得的“在资源管理器中双击”非常接近。

但是这里有一个问题,.mov 是一个常见的扩展名,您不知道最终用户设置了什么来打开 .mov 文件,它可能是 MPC、VLC、mplayer 等,因此仅使用 ExecShell 可能会失败。

最好还是尝试定位QT,直接执行:

ReadRegStr $0 HKLM "SOFTWARE\Apple Computer, Inc.\Quicktime" "InstallDir"
ExecShell "" '"$0\QuicktimePlayer.exe"' '"$Instdir\MyFile.mov"'

【讨论】:

  • 我知道我必须以文件作为参数调用 QuickTimePlayer.exe - 抱歉我没有明确说明这一点。但上述方法不起作用有两个原因:磁盘上不存在 .mov 文件供 QT 执行(错误 -43),安装程序立即继续。由于我们需要知道用户是否实际安装了 QTJ,因此该过程需要像 ExecWait 一样运行。有没有办法将此文件复制到磁盘(可能在某个临时文件夹中?)然后使用 ExecWait 运行?我使用 $PLUGINSDIR 尝试了这种方法,但没有创建文件夹,因此无法在那里复制任何内容。
  • @wade 在复制到 $pluginsdir 之前使用 InitPluginsDir。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多