在我的 MFC 应用程序中,我正在做类似的事情
CFileStatus fs;
if (CFile::GetStatus("MyOtherProg.exe", fs))
{
// found the file
::ShellExecute(NULL, NULL, "MyOtherProg.exe", NULL, NULL, SW_SHOW);
}
但在静态 CFile::GetStatus 中找到的文件的完整路径不是 ::ShellExecute 执行的路径(它具有相同的名称,但在不同的文件夹中运行不同版本的“MyOtherProg.exe”) .
我已经在具有相同操作系统(Win7 64 位)的不同 PC 上尝试过这个,在不同的文件夹中有不同的“MyOtherProg.exe”集。两台 PC 的 ShellExecute 运行的都与 CFile::GetStatus 中的相同。一台 PC 总是运行版本 3,另一台 PC 总是运行版本 2(为什么不一致?)。
注 1:在 2 台 PC 中,至少“安装”了 3 个版本,但没有一个安装在 PATH 中。有些确实在桌面上有快捷方式,如果那是一些未记录的功能。
注2:它们都是“MyOtherProg.exe”的不同版本,但安装在不同的目录中。
注意 3:最终通过 ::ShellExecute 运行的完整路径与我在任务栏开始菜单下方的搜索编辑字段中键入“MyOtherProg.exe”时找到的路径相同。但是为什么 CFile::GetStatus 找到的不是同一个?为什么在一台 PC 上是版本 2,而在另一台 PC 上是版本 3?
注 4:在两台 PC 上,运行命令“MyOtherProg.exe”的搜索结果列表仅显示 1 个版本(尽管在一台 PC 上安装了 3 个版本,而在另一台 PC 上安装了 4 个不同版本,其中第五个是“调试”构建)。具有 3 个版本的 PC 始终仅列出版本 2,具有 5 个版本的 PC 始终仅列出版本 3。