您需要在cmd行参数,而不是在应用程序名称指定的EXE名称。
这工作:
STARTUPINFO info;
ZeroMemory(&info, sizeof(info)); info.cb = sizeof(info);
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
TCHAR sz[1000]; // Note: lpCommandLine must be writable
lstrcpy(sz, L"c:\\users\\serge\\desktop\\notepad.dontrun");
CreateProcess(NULL, sz, NULL, NULL, FALSE, 0, NULL, NULL, &info, &pi);
printf("Error = %u\n", GetLastError());
这确实给人没有找到文件错误(2):
STARTUPINFO info;
ZeroMemory(&info, sizeof(info)); info.cb = sizeof(info);
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
CreateProcess(L"c:\\users\\serge\\desktop\\notepad.dontrun",
NULL, NULL, NULL, FALSE, 0, NULL, NULL, &info, &pi);
printf("Error = %u\n", GetLastError());
注:测试在Win7的X64
如何隐藏它在一个子“bin”文件夹?另外,你可以检查它是否是由A.exe产生的,我认为。 – Xeo
我已经做了验证,以确保B.dontrun由A.exe启动(如果通信未设置,如果特殊cmd行标记未通过,toolhelp.dll等),但我想为了避免“我一直尝试启动B.exe但没有任何反应!”的糟糕用户体验! – poday
@poday:不要。把它放在一个“bin”文件夹中,你应该没问题,没有人担心这个。看看主要的应用程序,没有人会阻止你启动子分区。 – Xeo