当我的应用程序从另一个应用程序启动时相对路径更改问题

时间:2017-07-05 10:18:20

标签: c++ qt

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

然而,现在另一个应用程序(C.exe)可以运行A.exe,C.exe是在另一个文件夹中,所以问题来了,如果从.exe启动A.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;

1 个答案:

答案 0 :(得分:2)

如果您从其他应用启动应用,则还必须设置该文件夹。我的意思是,如果C在PATH_C中,并且C启动PATH_A中的应用程序A,则进程A在PATH_C中运行,因此当您尝试运行进程B时,它是不可访问的。

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

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

如果是,则在给定文件夹中打开nautilus。如果没有,则在启动它的进程的文件夹中打开nautilus,在本例中为Documents文件夹。

为了避免这个问题,如果B.exe将其全部放在与A.exe相同的文件夹中,则使用GetModuleFileName函数使用可执行文件的相对路径启动B.exe。