15,979
社区成员
发帖
与我相关
我的任务
分享
if (!CreateProcess(NULL, _T("copy \"D:\\TestProject\\MyFunctions\\MyFunctions\\1.TXT\" \"D:\\TestProject\\MyFunctions\\MyFunctions\\Debug\\aaa.txt\""), NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
就会异常:
Unhandled exception at 0x7c8309b9 in MyFunctions.exe: 0xC0000005: Access violation writing location 0x00431e80.
然后我改成
if (!CreateProcess(_T("C:\\WINDOWS\\system32\\cmd.exe"), _T("copy \"D:\\TestProject\\MyFunctions\\MyFunctions\\1.TXT\" \"D:\\TestProject\\MyFunctions\\MyFunctions\\Debug\\aaa.txt\""), NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) //
{
return FALSE;
}
异常就没有了,而且也不会进到return FALSE;去,说明成功了,控制台也没出来,问题是,没有拷贝成功,何解?
命令行没有问题,我直接system("copy \"D:\\TestProject\\MyFunctions\\MyFunctions\\1.TXT\" \"D:\\TestProject\\MyFunctions\\MyFunctions\\Debug\\aaa.txt\"");是可以拷贝成功的[/quote]
system() 相当于 cmd /c
你CreateProcess第二个参数应该加 /c 在 copy 前面.
另外 WinExec(cmdline,SW_HIDE); 就没有黑框框了 cmdline = "cmd.exe /c del xx.exe"; 类似这样
如果要等待拷贝结束 可以自己定义一个函数,像WaitProcess()这样的
void WaitProcess(LPTSTR FileName,LPTSTR Param)
{
SHELLEXECUTEINFO ShellInfo = {0};
ShellInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShellInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShellInfo.hwnd = 0;
ShellInfo.lpVerb = 0;
ShellInfo.lpFile = FileName; /////传入cmd.exe路径
ShellInfo.lpParameters = Param; //////传入 /c copy ....
ShellInfo.lpDirectory = 0;
ShellInfo.nShow = 0;
ShellInfo.hInstApp = 0;
ShellExecuteEx(&ShellInfo);
WaitForSingleObject(ShellInfo.hProcess,-1);
}
供后来人参考 STARTUPINFO si = {0};
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
if (!CreateProcess(_T("C:\\WINDOWS\\system32\\cmd.exe"), CommandLine, NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
WINBASEAPI
BOOL
WINAPI
CreateProcessW(
__in_opt LPCWSTR lpApplicationName,
__inout_opt LPWSTR lpCommandLine,
__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in BOOL bInheritHandles,
__in DWORD dwCreationFlags,
__in_opt LPVOID lpEnvironment,
__in_opt LPCWSTR lpCurrentDirectory,
__in LPSTARTUPINFOW lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInformation
);
然后我
system_hide(_T("copy ...."));
BOOL CMyFunctionsDlg::system_hide(TCHAR *CommandLine)
{
if (!CreateProcess(_T("C:\\WINDOWS\\system32\\cmd.exe"), CommandLine, NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)).........
}
/////////////////////////////////
system_hide(_T("copy ...."));
BOOL CMyFunctionsDlg::system_hide(LPWSTR CommandLine)
{
if (!CreateProcess(_T("C:\\WINDOWS\\system32\\cmd.exe"), CommandLine, NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)).........
}
都没成功,这应该怎样转BOOL WINAPI CreateProcess(
__in_opt LPCTSTR lpApplicationName,
__inout_opt LPTSTR lpCommandLine,
__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in BOOL bInheritHandles,
__in DWORD dwCreationFlags,
__in_opt LPVOID lpEnvironment,
__in_opt LPCTSTR lpCurrentDirectory,
__in LPSTARTUPINFO lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInformation
);
第二个参数是LPTSTR,不是LPCTSTR
if (!CreateProcess(NULL, _T("copy \"D:\\TestProject\\MyFunctions\\MyFunctions\\1.TXT\" \"D:\\TestProject\\MyFunctions\\MyFunctions\\Debug\\aaa.txt\""), NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
就会异常:
Unhandled exception at 0x7c8309b9 in MyFunctions.exe: 0xC0000005: Access violation writing location 0x00431e80.
然后我改成
if (!CreateProcess(_T("C:\\WINDOWS\\system32\\cmd.exe"), _T("copy \"D:\\TestProject\\MyFunctions\\MyFunctions\\1.TXT\" \"D:\\TestProject\\MyFunctions\\MyFunctions\\Debug\\aaa.txt\""), NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) //
{
return FALSE;
}
异常就没有了,而且也不会进到return FALSE;去,说明成功了,控制台也没出来,问题是,没有拷贝成功,何解?
命令行没有问题,我直接system("copy \"D:\\TestProject\\MyFunctions\\MyFunctions\\1.TXT\" \"D:\\TestProject\\MyFunctions\\MyFunctions\\Debug\\aaa.txt\"");是可以拷贝成功的