सी ++ में कोई प्रोग्राम कैसे लिखें जैसे कि यह निष्पादन के बाद खुद को हटा देगा?सी ++ में प्रोग्राम कैसे लिखें जैसे कि यह निष्पादन के बाद खुद को हटा देगा?
उत्तर
यहाँ सी में कोड जो निष्पादन के बाद निष्पादन को नष्ट करेगा है।
#include <Windows.h>
#include <strsafe.h>
#define SELF_REMOVE_STRING TEXT("cmd.exe /C ping 1.1.1.1 -n 1 -w 3000 > Nul & Del /f /q \"%s\"")
void DelMe()
{
TCHAR szModuleName[MAX_PATH];
TCHAR szCmd[2 * MAX_PATH];
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
GetModuleFileName(NULL, szModuleName, MAX_PATH);
StringCbPrintf(szCmd, 2 * MAX_PATH, SELF_REMOVE_STRING, szModuleName);
CreateProcess(NULL, szCmd, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
void main()
{
/* Do what you need */
/* Call this function at the very end of your program to delete itself */
DelMe();
}
यह एक वैध पर्याप्त सवाल है, लेकिन यह आप समझ में नहीं आता कि कैसे काम निष्पादनयोग्य लगता है। निष्पादन प्रोग्राम को स्मृति में रखता है इसलिए डिस्क फ़ाइल को हटाना छोटा होता है (बशर्ते आप रन-टाइम निर्भरता भी हटाएं)।
अगर इसे स्मृति में निष्पादित किया गया है, तो प्रोग्राम क्यों चल रहा है, तो मैं (विंडोज़ में) निष्पादन योग्य क्यों नहीं हटा सकता ? –
निष्पादन स्थान ** मेमोरी में प्रोग्राम के ** भाग ** - बाद में लोड होने के लिए डिस्क पर कई पेज छोड़े जा सकते हैं, यही कारण है कि अधिकांश ओएस आपको निष्पादन प्रक्रिया का प्रतिनिधित्व करने वाली फ़ाइल को हटाने की अनुमति नहीं देते हैं। –
आह, मैं देखता हूं। यह मुख्य रूप से मैंने सोचा था कि क्या होगा। –
यूनिक्स पर, बस (2) निष्पादन पर अनलिंक कहते हैं।
विंडोज़ पर, आपको मदद करने के लिए दूसरी प्रक्रिया की आवश्यकता है। St0le से प्रतिक्रिया एक डीएलएल को अनलिंक करने के लिए प्रतीत होती है, लेकिन निष्पादन योग्य के लिए, आपको दूसरी प्रक्रिया शुरू करने या मौजूदा प्रक्रिया का उपयोग करने की आवश्यकता होगी, और फिर अपने निष्पादन योग्य को समाप्त कर दें और दूसरी प्रक्रिया को हटा दें।
एक बहुत ही सरल दृष्टिकोण cmd.exe उपयोग करने के लिए मदद करने के लिए होगा।
किसी अन्य प्रक्रिया का उपयोग करने वाला एक सट्टा दृष्टिकोण किसी अन्य प्रक्रिया में कुछ स्मृति आवंटित करना और उस फ़ाइल नाम को रखना है जिसे आप वहां हटाना चाहते हैं, फिर रिमोट प्रक्रिया में निलंबित थ्रेड बनाने के लिए CreateRemoteThread() का उपयोग करें आपके द्वारा आवंटित स्मृति में पॉइंटर के तर्क के साथ हटाएं। फिर अपनी प्रक्रिया से बाहर निकलें, थ्रेड निलंबित गिनती कम होनी चाहिए और फिर हटाएं फ़ाइल को आपकी फ़ाइल को हटाने के लिए बुलाया जाना चाहिए।
मुद्दे: दूरस्थ प्रक्रिया में स्मृति रिसाव, गंदा।
एक आसान तरीका सिर्फ st0le के उत्तर से तकनीकों का उपयोग कर एक सहायक डीएलएल होना चाहिए।
हालांकि निष्पादन के बाद फ़ाइल को हटाने के लिए एक तरीका है क्योंकि प्रत्येक अनइंस्टॉलर उस सॉफ़्टवेयर को अनइंस्टॉल करता है जो इसे स्थापित किया गया था & अंतिम शेष फ़ाइल को भी हटा देता है यानी, स्वयं ही ऐसी हार्ड डिस्क में कोई भी फाइल शेष नहीं होगी प्लेटफार्म के बावजूद कुछ रजिस्ट्री प्रविष्टियां इसे स्थापित किया गया है।
std::remove(argv[0])
मुख्य में लौटने से पहले यह कर सकता है।
आप वास्तव में 100% सुनिश्चित नहीं हो सकते कि 'argv [0]' निष्पादन योग्य के लिए उचित पथ है। ऐसा माना जाता है, लेकिन कोई प्रवर्तन नहीं है और ऐसे मामले हैं जिनमें यह एक कारण या किसी अन्य कारण से टूटा हुआ है। – dmckee
यह विंडोज पर काम नहीं करेगा। –
विंडोज़ के लिए इसे आजमाएं।
http://www.codeproject.com/Articles/4027/Writing-a-self-destructing-exe-file
- 1. कोई प्रोग्राम अपने निष्पादन योग्य को कैसे हटा सकता है
- 2. प्रोग्राम के StdOut स्ट्रीम को सीधे सी # में कैसे लिखें?
- 3. सी # में अपना खुद का रैपर कैसे लिखें?
- 4. एक स्ट्रीम को लिखें जैसे कि यह एक फ़ाइल थी, लेकिन वास्तव में किसी ऑब्जेक्ट को
- 5. पाइथन में बाद में निष्पादन के लिए पोस्टपोन कोड (जैसे जावास्क्रिप्ट में सेटटाइमआउट)
- 6. निष्पादन प्रोग्राम
- 7. सी प्रोग्राम निष्पादन की गति
- 8. सिग्नल को संभालने के बाद एक सी प्रोग्राम निष्पादन जारी रख सकता है?
- 9. एक निष्पादन योग्य सी प्रोग्राम
- 10. सत्र.invalidate() सत्र में सेट विशेषता को हटा देगा?
- 11. संकलन के दौरान प्रोग्राम कैसे लिखें?
- 12. मैं प्रोग्राम को एक प्रोग्राम को कैसे हटा सकता हूं?
- 13. क्रॉस-प्लेटफ़ॉर्म प्रोग्राम कैसे लिखें?
- 14. एक .NET प्रोग्राम खुद को कैसे अपडेट कर सकता है?
- 15. verbatim लेटेक्स में यह कैसे लिखें
- 16. निष्पादन के बाद malloced स्मृति के साथ क्या होता है() प्रोग्राम छवि को बदलता है?
- 17. रेलवे माइग्रेशन कॉलम के साथ एक कॉलम को हटा देगा
- 18. जावा में अपना खुद का मार्कर इंटरफ़ेस कैसे लिखें?
- 19. लिनक्स: एक सी प्रोग्राम लिखें जो एक शेल
- 20. स्टार्टअप के बाद एक प्रक्रिया खुद को बढ़ा सकती है?
- 21. php स्क्रिप्ट जो पूरा होने के बाद खुद को हटा देती है
- 22. कमांड लाइन से जावा प्रोग्राम के निष्पादन को कैसे रोकें?
- 23. कमांड के आउटपुट को फ़िल्टर करें जैसे कि यह
- 24. एक सी या सी ++ प्रोग्राम को मेमोरी और सीपीयू चक्र भराव के रूप में कार्य करने के लिए कैसे लिखें?
- 25. सी ++ ऑडियो प्रसंस्करण अनुप्रयोगों को कैसे लिखें?
- 26. सादा सी में यूनिट परीक्षण कैसे लिखें?
- 27. मेरे पुराने express.js सत्रों को फिर से हटा देगा?
- 28. क्या यह संभव है कि जावा बाइटकोड निर्देशों के साथ सीधे एक प्रोग्राम लिखें?
- 29. जावा में एक स्व-अद्यतन प्रोग्राम कैसे लिखें?
- 30. लॉक कि सी # में कई पाठकों की अनुमति देगा
अब तुम क्यों कि, मुझे आश्चर्य है कि क्या करना चाहते हैं: यह मूल रूप से एक .bat फ़ाइल है कि लूप जब तक विनाश sucessful है लॉन्च कर रहा है? –
@Neil: यह एक जाल है! – BoltClock
@Neil: @ 007 की नौकरी पाने के लिए। मुझे वहां नौकरी भी चाहिए, इसलिए मैं किसी भी अच्छे जवाब को उखाड़ फेंक रहा हूं। –