【发布时间】:2012-10-05 07:27:03
【问题描述】:
我有一个 Delphi 应用程序,它使用 ShellExecute 在按下按钮时调用第二个 Delphi 应用程序。
应用程序存储在同一台服务器的同一网络共享上。它们的路径格式为:
const
JobManager = 'Z:\Apps\Application 1\Application1.exe';
FeeManager = 'Z:\Apps\Application 2\Application2.exe';
对 ShellExecute 的调用如下:
rh := FindWindow(PChar('TMF'), PChar('Edit Job Details'));
if rh = 0 then
begin
ShellExecute(Handle, 'open', JobManager, nil, nil, SW_SHOWNORMAL);
...
由于我们有三个办公室,我们在每个办公室服务器上都有 Apps 文件夹的副本。每个服务器都有一个共享上的 Apps 文件夹,映射到“Z:”
在其中一个办公室中,我们发现了一个问题,即如果路径包含空格,则无法找到应用程序。由于应用程序是彼此的直接副本,并且在其他办公室工作,问题似乎是机器设置。
有什么想法吗?
【问题讨论】:
-
你试过使用双引号吗?
ShellExecute(0, nil, PChar('"Z:\Apps\Application 1\Application1.exe"'), nil, nil, 0); -
显示代码,并包含传递给 ShellExecute 的任何变量的值。
-
@Paul-Jan 已经过快速重新编译测试以删除空格并重命名问题机器上受影响的文件夹。这行得通,但不是一个长期的解决方案。我们尚未确定这是单台机器或分支机构的问题。
-
ShellExecute 失败时返回错误代码,代码好像没有检查。
-
在您的参数中。尝试使用 0 作为句柄,
nil而不是open(默认)和PChar(JobManager)。周围的双引号根本不需要AFAIK。
标签: delphi windows-xp filepath shellexecute