C++ 如何从隐藏文件夹WinAPI运行程序

C++ 如何从隐藏文件夹WinAPI运行程序,c++,winapi,visual-c++,C++,Winapi,Visual C++,我正在尝试使用以下代码运行程序: PROCESS_INFORMATION ProcInfo = { 0 }; STARTUPINFO StartInfo = { 0 }; StartInfo.cb = sizeof(StartInfo); if (!::CreateProcessW(NULL, (LPWSTR)wszPathToFile, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &StartIn

我正在尝试使用以下代码运行程序:

    PROCESS_INFORMATION ProcInfo = { 0 };

    STARTUPINFO StartInfo = { 0 };
    StartInfo.cb = sizeof(StartInfo);

    if (!::CreateProcessW(NULL, (LPWSTR)wszPathToFile, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &StartInfo, &ProcInfo)) {
        return GetLastError();
    }
但我收到错误消息:系统找不到指定的路径。 wszPathToFile—文件的路径(例如:“C:\test\test.exe/retest”)。文件夹“test”被隐藏
如何修复它?

文件夹被隐藏与此无关。这在这里没有影响

如注释中所述,您正在强制转换
lpCommandLine
参数的事实表明
szPathToFile
不是正确的类型。它必须是指向可修改的宽字符数组的指针。如果是,则可以省略强制转换,编译器将直接接受
szPathToFile


最有可能的
szPathToFile
实际上是指向ANSI编码的8位
char
数组的指针

这种类型使我感到紧张。szPathToFile-wide字符字符串没有必要进行类型转换。我使用CreateProcessW。此函数适用于Unicode。问题是目录是隐藏的。如果要使目录可见,一切都正常。显然,您正在调用Unicode函数。然而,演员阵容是假的。这意味着
szPathToFile
的编码错误。演员阵容无法改变这一点。它只是停止了编译器对您的帮助。取下铸件。正如我所说,隐藏与否没有区别。也就是说,如果您的意思是使用
文件\u属性隐藏
。如果你正在使用一些邪恶的手段来隐藏事情,那么事情就不同了。