2012-06-08 56 views
0

運行以下代碼後,所有操作都會按照我的意願進行,除了該文件夾顯示此消息:test2﷽﷽ꮫꮫꮫꮫووو通過CreateProcessW使用「mkdir」創建的目錄名稱中的垃圾?

這是怎麼回事?

  std::string arrString[3] = {" /C mkdir C:\\Users\\Andrew\\Desktop\\test1"," /C mkdir C:\\Users\\Andrew\\Desktop\\test2"," /C mkdir C:\\Users\\Andrew\\Desktop\\test3"}; 
      LPWSTR cmd =L"C:\\Windows\\System32\\cmd.exe"; 
      int i; 


      for(i=0; i<3; i++) 
      { 
       STARTUPINFO info={sizeof(info)}; 
       PROCESS_INFORMATION processInfo; 
       vector<wchar_t> cmdline(arrString[i].begin(), arrString[i].end()); 
       CreateProcessW(cmd, &cmdline[0], NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo); 
       OutputDebugStringW(L"My output\nstring."); 
      } 
     } 
+5

在所有可能的結果中,這是非常漂亮的。那麼,除了4盒。 – 2012-06-08 19:36:31

回答

6

cmdline不正確ASCIIZ終止。您可以檢查是否是這種原因只是增加一個結束0(注:未測試和快速黑客):

cmdline.push_back(0); 
+0

在CreateProcess行中正確嗎? 'CreateProcessW(cmd,&cmdline.push_back(0)[0],NULL,NULL,TRUE,CREATE_NO_WINDOW,NULL,NULL,&info,&processInfo);' – arynhard

+0

不,只是把代碼告訴你, '。 –

+0

完美的作品。謝謝。謹慎地指出我的方向,可能會告訴我到底是怎麼回事?文檔或我可以查找的關鍵字。這將非常感激。 – arynhard

0

正如其他人所說,你是不是傳遞一個空值終止字符串CreateProcessW(),即爲什麼最終會在文件夾名稱中出現多餘的字符。在另一個筆記上,而不是使用CreateProcessW()來調用mkdir,您應該使用CreateDirectoryW()來代替。然後您可以將arrStringstd::string更改爲std::wstring,並完全擺脫std::vector