【问题标题】:How can I launch Delphi 7 from an EXE file written in Delphi XE?如何从用 Delphi XE 编写的 EXE 文件启动 Delphi 7?
【发布时间】:2011-05-15 15:49:42
【问题描述】:

我正在做一些构建自动化,并希望从我正在使用 Delphi XE 编写的应用程序中运行 Delphi 7 IDE。

我的 Delphi 7 IDE 位于:

'C:\Program Files\Borland\Delphi7\Bin\delphi32.exe'

还在做:

ShellExecute( Handle, 'Open', 'C:\Program Files\Borland\Delphi7\Bin\delphi32.exe', '', '', sw_ShowNormal );

最终进入 Delphi 7 IDE,但只是在大量缺少包错误之后。

在做:

ShellExecute( Handle, 'Open', 'C:\windows\notepad.exe', '', '', sw_ShowNormal );

工程文件打开记事本。

我还有一个名为“Delphi7IDE.bat”的批处理文件,当我单击批处理文件时它会打开 Delphi 7,但是这样做:

ShellExecute( Handle, 'Open', 'C:\sys\batch\Delphi7IDE.bat', '', '', sw_ShowNormal );

产生与上述相同的错误。

我尝试使用 Delphi 7 菜单快捷方式中指定的目录(即调用:

ShellExecute( Handle, 'Open', 'C:\Program Files\Borland\Delphi7\Bin\delphi32.exe', '', 'C:\Program Files\Borland\Delphi7\Projects\', sw_ShowNormal );"

但这给出了同样的错误(这是可以预料的,因为上面的批处理文件示例没有固定目录并且在单击时运行良好)。

有多个错误,但其中一个示例是

请问我做错了什么?

【问题讨论】:

  • 更多的是猜测而不是答案,但是您是否正确设置了当前目录?
  • @Mason:谢谢,但我尝试过但没有成功,我更新了帖子以包含此内容和错误消息,以防出现提示。
  • 这不应该是这样,但是您尝试将0 作为句柄和nil 作为动词(分别为第一个和第二个参数)传递给ShellExecute
  • 还有更多的猜测:也许这是对您的某些文件/包的访问限制的问题?

标签: delphi shellexecute


【解决方案1】:

现在我想我明白了。德尔福 7 是旧的。 Windows Vista(或 7)是新的。 您以管理员身份运行delphi32.exe,是不是为了兼容性,不是吗?也就是说,如果您右键单击delphi32.exe(或快捷方式),您已选择“以管理员”在“兼容性”选项卡中。如果你以管理员身份运行delphi32.exe,一切都很好,但如果你不这样做,你会在启动时遇到所有这些错误。

现在,当您 ShellExecute delphi32.exe 从您的 Delphi 应用程序中时,delphi32.exe 继承您的 Delphi 应用程序的权限。这很可能在没有任何提升权限的情况下运行,delphi32.exe 也是如此。

解决方案:右键单击您的 Delphi 应用程序(例如Project1.exe),选择“兼容性”选项卡,然后单击“以管理员身份运行此程序”复选框。

【讨论】:

  • 你说得对。做得好。我也尝试以管理员身份运行 XE IDE,但错误仍然存​​在。那么,XE 是如何启动进程的呢?我将检查代码中的高度。谢谢。
【解决方案2】:

您可能弄错了工作目录。右键单击开始菜单上的“Delphi 7”图标,Ctrl+C 进入该快捷方式的工作目录。将此字符串用作ShellExecuteDirectory 参数。

我没有任何 Delphi 7 系统可以试验,但是在我安装了 Delphi 4 的虚拟 WIndows 95 机器上,确实有一个指定的工作目录:

【讨论】:

  • 对了,你们是不是都想念 Windows 95 了?
  • 是的,我很想念它。我希望您拥有用于回归测试的虚拟机,而不是因为某种病态的自虐癖。
  • 当然可以;我想念软盘分发和随机蓝屏死机 :) +1 反正
  • @Andreas:谢谢,但不是这样。为什么批处理文件运行正常,但从 ShellExecute 调用时却不行?是否有一些我缺少的环境内容?
  • @Brian:你能发布批处理文件吗?
【解决方案3】:

这可能会让您感兴趣:http://msdn.microsoft.com/en-us/library/ms682431(v=vs.85).aspx 这是一个关于如何使用该功能的 Delphi 示例:http://www.delphi3000.com/articles/article_4176.asp

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多