如何从使用Delphi XE编写的EXE文件启动Delphi 7?

5

我正在进行一些构建自动化工作,希望能够从我使用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 );"

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

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

请问我做错了什么?


2
更像是猜测而不是答案,但你是否正确设置了当前目录? - Mason Wheeler
@Mason:谢谢,但我已经尝试过了,没有成功。我已经更新了帖子,包括错误信息,以防有提示出现。 - Brian Frost
这不应该是这样的,但您是否尝试将0作为句柄和nil作为动词(分别作为第一和第二个参数)传递给ShellExecute - Andreas Rejbrand
也许这只是一个猜测:也许这是一些文件/包的访问限制问题? - Andreas
3个回答

3
现在我明白了。Delphi 7是旧版本,Windows Vista(或7)是新版本。您是以管理员身份运行delphi32.exe,以确保兼容性,对吗?也就是说,如果您右键单击delphi32.exe(或快捷方式),并在“兼容性”选项卡中选择“以管理员身份运行此程序”,则一切正常。但是如果您不这样做,则会在启动过程中出现所有这些错误。
现在,当您从Delphi应用程序ShellExecutedelphi32.exe时,delphi32.exe继承您的Delphi应用程序的权限。最可能的情况是,此时正在没有任何提升的特权下运行,因此delphi32.exe也将如此。
解决方案:右键单击您的Delphi应用程序(例如Project1.exe),选择“兼容性”选项卡,并选中“以管理员身份运行此程序”复选框。

你说得完全正确。干得好。我也尝试以管理员身份运行XE IDE,但错误仍然存在。那么,XE是如何启动进程的呢?我将在代码中检查提权。谢谢。 - Brian Frost

2
你可能在获取工作目录时出错了。右击“开始”菜单中的“Delphi 7”图标,然后使用Ctrl+C复制此快捷方式的工作目录。将此字符串用作ShellExecuteDirectory参数。
我没有任何Delphi 7系统进行实验,但在我的虚拟Windows 95机器上,我安装了Delphi 4,确实有指定的工作目录。

4
顺便问一下,大家不是都怀念Windows 95吗? - Andreas Rejbrand
是的,我非常想念它。我希望你已经准备好了用于回归测试的虚拟机,而不是出于某种病态的受虐癖。 - Wouter van Nifterick
1
当然,我想念软盘分发和随机蓝屏的死亡 :) 无论如何+1 - user532231
@Andreas:谢谢,但那不是问题所在。为什么批处理文件可以正常运行,但从ShellExecute调用时却不能?我是否遗漏了一些环境设置? - Brian Frost
@Brian:你能发布一下批处理文件吗? - Andreas Rejbrand
@Brian: 另外,如果你只是使用Win+R键盘快捷键输入“delphi32”,会发生什么? - Andreas Rejbrand

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接