2010-04-08 10 views
6

मैं प्रोग्रामेटिक रूप से स्वयं को कैसे हटा सकता हूं?प्रोग्रामेटिक रूप से स्वयं को कैसे हटाएं? (सी # विनमोबाइल)

सी #/NET कम्पैक्ट फ्रेमवर्क 2/विंडोज मोबाइल 6

कृपया, मैं नहीं चाहता कि चर्चा करने के लिए क्यों यह क्या करना चाहते हैं, मैं सिर्फ यह कैसे करना है पता करने के लिए की जरूरत है!

महत्वपूर्ण:

  • "दूसरा आवेदन" दृष्टिकोण एक विकल्प नहीं है। (जब तक कि दूसरा एप्लिकेशन ऐप चलाने से "निकाला नहीं जा सकता", लेकिन मुझे नहीं पता कि यह कैसे करें!)।

  • विंडोज़ स्टार्टअप पर चाल चलने पर मजबूर रीबूट में कोई समस्या नहीं है। (क्या यह संभव है? अच्छा! मुझे दिखाओ कैसे!)।

  • कोड नमूने का स्वागत है।

उत्तर

1

मैंने इसे अतीत में फ़ाइल सिस्टम में बैच फ़ाइल लिखकर किया है जो कुछ सेकंड प्रतीक्षा करेगा और फिर प्रोग्राम को हटा देगा। फिर आप बैच फ़ाइल को लात मारने के लिए Process.Start() का उपयोग करें और तुरंत Environment.Exit() पर कॉल करें। आपको यह सुनिश्चित करने की ज़रूरत है कि बैच फ़ाइल आपके प्रोग्राम को बंद करने के लिए काफी देर तक प्रतीक्षा करेगी, या यह काम नहीं करेगी।

+2

बैच फ़ाइलों को छोड़कर विंडोज मोबाइल ... में समर्थित नहीं हैं और जो कुछ भी फ़ाइल आप wold लिख तो वर्तमान छोड़ने ब्रेडक्रंब हो। – ctacke

5

एकमात्र तरीका मैं अपने आप को हटाने के लिए ऑफहैंड के बारे में सोच सकता हूं और कोई निशान नहीं छोड़ सकता है, डिवाइस में पहले से मौजूद कुछ का उपयोग करना- अर्थात वासेलोड (सीएबी निकालने वाला)। मैं कस्टम इंस्टॉलर डीएलएल के साथ एक साधारण सीएबी फ़ाइल तैयार करूंगा जो प्रतीक्षा करता है और फिर हटा देता है।

मैं फिर एप में एम्बेडेड संसाधन के रूप में ऐप को जोड़ दूंगा। जब आप आप

  1. नष्ट करने के लिए फाइल सिस्टम के लिए कैब को निकालने की जरूरत है
  2. एक पैरामीटर और/noui के रूप में कैब के साथ wceload.exe निष्पादित (या/मूक)
  3. अपने एप्लिकेशन छोड़ें

सीएबी तब आपकी फाइल को हटा देता है (एक नामित म्यूटेक्स डीएलएल में सिर्फ एक स्लीप कॉल से बेहतर सिंक कर सकता है)। wceload स्वचालित रूप से सीएबी हटा देता है (अच्छी तरह से WinMo संस्करण के आधार पर, लेकिन यदि आवश्यक हो तो हटाने के लिए एक स्विच है)।

यह निश्चित रूप से एक हैक है, लेकिन यह "छोड़ने वाला कोई निशान नहीं" हटा देगा। बेशक सीएबी को शायद अपनी खुद की स्थापना रजिस्ट्री प्रविष्टियों को भी साफ करना होगा। हो सकता है कि आप पहले स्थान पर लिखे जाने से रोकने के लिए बस "विफलता" इंस्टॉल कर सकें।

-1

विंडोज स्टार्टअप पर फ़ाइलों को हटा सकता है। यह MoveFileEx फोन करके किया जा सकता है की तरह है:

MoveFileEx(szDstFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); 

मुझे यकीन है कि अगर है कि एपीआई मोबाइल 6 या नहीं में उपलब्ध है नहीं कर रहा हूँ। हालांकि, यह वास्तव में क्या करता है HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ सत्र प्रबंधक \ लंबित FileRenameOperations में रजिस्ट्री प्रविष्टि बनाता है। कुंजी एक REG_MULI_SZ है और आपको इसे "szDstFile \ 0 \ 0" जैसे मान देने की आवश्यकता है। रीबूट पर विंडोज़ फ़ाइल हटा देता है।

प्रोग्रामेटिक रूप से रीबूट करने के लिए, SO पर this धागा देखें।

+1

दुर्भाग्यवश सीई के तहत समर्थित नहीं है। – ctacke

1

मैं इस कोड का उपयोग कर रहा हूँ और यह काम करता है ठीक

string AppPath = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location).ToString() + "\\Uninstaller.exe"; 

ProcessStartInfo Info = new ProcessStartInfo(); 
Info.Arguments = "/C choice /C Y /N /D Y /T 0 & Del " + AppPath; 
Info.WindowStyle = ProcessWindowStyle.Hidden; 
Info.CreateNoWindow = true; 
Info.FileName = "cmd.exe"; 
Process.Start(Info); 
संबंधित मुद्दे