从另一个应用启动我的应用时出现相对路径更改问题

relative path changed issue when my app is launched from another app

本文关键字:应用 路径 相对 问题 另一个 启动 我的      更新时间:2023-10-16

我面临一个困惑的问题,我有一个应用程序(让我们命名为A.exe),在我的应用程序中,它可以启动另一个应用程序(B.exe),在我的文件夹中,A.exe和B.exe在同一个文件夹中,所以这里B.exe的相对路径是"B.exe"。

但是,现在另一个应用程序(C.exe)可以运行A.exe,C.exe在另一个文件夹中,所以问题来了,如果A.exe从C.exe启动,它永远无法运行C.exe,因为我收到一个错误说它找不到C.exe。

所以我认为相对路径更改为当前 C.exe 的文件夹,在 C.exe 文件夹中,没有 B.exe。

有没有朋友遇到这个问题?或者我怎样才能在不同的状态下获得正确的相对路径来解决这个问题?

我使用ShExecInfo来运行我的c.exe,一些代码如下:

QStringList paramList;
paramList.push_back("requiresAdmin");
QString paramsAsOneString = paramList.join(' ');
LPCWSTR szParams = reinterpret_cast<LPCWSTR>(paramsAsOneString.utf16());
LPCWSTR szAppName = reinterpret_cast<LPCWSTR>(appName.utf16());
SHELLEXECUTEINFO ShExecInfo = { 0 };
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = L"runas";
ShExecInfo.lpFile = szAppName;
ShExecInfo.lpParameters = szParams;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;

如果您从另一个应用程序启动应用程序,则还必须设置该文件夹。我的意思是,如果 C 处于PATH_C状态,并且 C 启动了PATH_A中的应用程序 A,则进程 A 在PATH_C中运行,因此当您尝试运行进程 B 时,它无法访问。

例如,您还必须设置文件夹。当你在 Ubuntu 中运行 nautilus 时,你还必须设置文件夹:

user:~Documents/$: nautilus /home/user/

如果是这样,则在给定文件夹中打开鹦鹉螺。如果没有,Nautilus 将在启动它的进程的文件夹中打开,在本例中为"文档"文件夹。

为了避免这个问题,如果 B.exe all all 与 A.exe 位于同一文件夹中,则使用 GetModuleFileName 函数使用可执行文件的相对路径启动 B.exe。