在C ++中,试图在Windows 10中从UNC运行EXE。C++的新手

问题描述 投票:0回答:1

我刚刚开始用C ++编写控制台应用程序。它进行了一些验证,然后需要找到并运行一个可执行文件,具体取决于部署方式,该可执行文件可以在各个地方出现。因此,大多数脚本可以运行,甚至运行部分也可以运行,具体取决于操作系统和位置。如果是本地计算机,则可以运行;如果是Windows 7,则即使在UNC上也可以运行。但是在Windows 10中,它只是退出。

脚本找到该exe并从其所在的路径运行它。当我将应用程序创建为批处理文件并使用popD移至工作目录的exe位置时,它可以工作,但是我似乎无法模仿该功能在C ++中。我已经尝试过SetCurrentDirectory,但不会传递我要传递的字符串。

if (version >= minver)
    {
        std::string name = "testApp.exe";
        std::string path = (fs::current_path().string());
        for (const auto& entry : fs::recursive_directory_iterator(path))
        {
            std::string list = entry.path().string();
            int found;
            if ((found = list.find(name)) !=list.npos)
            {
                std::cout << list << std::endl;
\\This is the part that sometimes works and sometimes doesn't
                system(list.c_str());

            }
        }
    }   
c++ filesystems
1个回答
0
投票

由于您可以从控制台启动程序,请尝试在控制台模式下使用CreateProcess功能:

int runProcessFromCmd( char* pcExecPath)
{

    if( NULL == pcExecPath)
    {
        printf("empty path!");
        return -1;
    }

    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    memset( &si, 0, sizeof(si) );
    memset( &pi, 0, sizeof(pi) );
    si.cb = sizeof(si);

    // Start child process from command line
    // First parameter = NULL => we use cmd
    if( !CreateProcess( NULL, pcExecPath, NULL,NULL, FALSE, 0, NULL,    NULL, &si, &pi )) 
    {
        printf( "CreateProcess failed with error (%d).\n", GetLastError() );
        return -2;
    }

    // Wait child process 
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Close all handles
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}
© www.soinside.com 2019 - 2024. All rights reserved.