所以我想在C++中使用code::blocks
來創建一個自我複製的.exe。我已經編寫了代碼,並在我的本地機器上完美運行。在將其加載到Windows 7虛擬機和其他2臺PC上後,我意識到它不起作用。它與錯誤Cpp自我訪問被拒絕
出現「無法複製文件,訪問被拒絕」
我的電腦可能有不同的權限設置我假設這就是爲什麼它適用於礦山,而不是其他。下面是一段代碼:
ifstream check("C:\\newfile.exe");
if(!check.is_open())
{
char bufferf[MAX_PATH];
GetModuleFileName(NULL, bufferf, MAX_PATH);
std::stringstream str;
str << "copy " << bufferf << " C:\\newfile.exe";
system(str.str().c_str());
system("start c:\\newfile.exe");
cout << __argv[0] << endl;
return 1;
}
else
{
return 0;
}
記住我是很新的C++,很長一段時間的Java,PHP和C#開發,但我想它是時間來學習一個較低的水平語言。如果你有任何建議使這個更高效的功能,那麼請讓我知道。顯示任何代碼,因爲我還沒有100%熟悉所有的圖書館。長話短說,我想複製當前的exe到cdrive,運行該複製的文件並關閉原件。這裏是我嘗試的另一種方式
ifstream check("C:\\newFile.exe");
if(!check.is_open())
{
char bufferf[MAX_PATH];
GetModuleFileName(NULL, bufferf, MAX_PATH);
char * original_file = bufferf;
char * new_file = (char *)"c:\\newFile.exe";
(void) CopyFile((LPCTSTR)original_file, (LPCTSTR)new_file, FALSE);
system("start c:\\newFile.exe");
cout << __argv[0];
return 1;
}
else
{
return 0;
}
仍然沒有成功。但是兩者在我的開發機器上完美地工作(從我所能看到的)我聽到有人說你不能在Windows中複製正在運行的exe文件,但這不是真的,我覺得這是一個權限問題,但我可能是錯的。
任何提示自我複製是受歡迎的,我打開新的方法。
說實話,這個問題看起來很可疑,而你長時間的java和c#開發人員的陳述值得懷疑。通常情況下,你會希望有一些歸檔文件被提取出來,然後執行一個包含文件,但是將它合併到一個程序中聽起來不太常見,我看不到它背後的推理。 – 2012-10-18 19:47:52
我一直是一個專業的網絡應用工程師15年,超過15種不同的語言,這是我曾經問過的第一個問題,也是爲什麼它似乎可疑?它正在爲第三方apache控制器編寫,以便在服務器上的某些功能上保存日誌和時間。我希望它作爲一個獨立的EXE,因爲它聽起來很不尋常,它需要完成。 –