2010-04-08 8 views
6

Jak programowo sam usuwać?Jak programowo usunąć samodzielnie? (C# WinMobile)

C#/.NET Compact Framework 2/Windows Mobile 6

Proszę, nie chcę, aby omówić DLACZEGO to zrobić, po prostu trzeba wiedzieć jak to zrobić!

Ważne:

  • Podejście "drugi wniosek" nie jest opcją. (Chyba, że ​​druga aplikacja może zostać "wyodrębniona" z uruchomionej aplikacji, ale nie wiem jak to zrobić!).

  • Nie ma problemu z wymuszonym ponownym uruchomieniem, jeśli system Windows załączy się podczas uruchamiania. (Czy to możliwe? Fajnie! Pokaż mi jak!).

  • Próby kodu są mile widziane.

Odpowiedz

1

Zrobiłem to w przeszłości, po prostu pisząc plik wsadowy do systemu plików, który będzie czekać kilka sekund, a następnie usunąć program. Następnie należy użyć Process.Start(), aby uruchomić plik wsadowy i natychmiast zadzwonić pod numer Environment.Exit(). Musisz upewnić się, że plik wsadowy czeka wystarczająco długo, aby zamknąć program, lub nie będzie działać.

+2

wyjątkiem plików wsadowych nie są obsługiwane w systemie Windows Mobile ... I cokolwiek plik zapisujesz Wold następnie występować panierka opuszczające. – ctacke

5

Jedyny sposób, w jaki mogę myśleć o tym, by usunąć siebie i pozostawić po sobie ślad, to użyć czegoś, co już jest w urządzeniu - mianowicie wceload (ekstraktor CAB). Stworzyłem prosty plik CAB z niestandardową biblioteką DLL instalatora, która czeka, a następnie usuwa.

Dodałabym następnie CAB do aplikacji jako zasób osadzony. Gdy trzeba usunąć Cię

  1. wyodrębnić CAB w systemie plików
  2. wykonać wceload.exe z CAB jako parametr i/noui (lub/silent)
  3. Zakończ aplikację

CAB następnie usuwa plik (nazwany muteks mógłby zsynchronizować to lepiej niż tylko wywołanie trybu uśpienia w bibliotece DLL). WOBoad automatycznie usuwa CAB (dobrze w zależności od wersji WinMo, ale istnieje przełącznik do wymuszenia usunięcia, jeśli to konieczne).

Z pewnością jest to hack, ale zapewnia usunięcie "pozostaw bez śladu". Oczywiście CAB będzie prawdopodobnie musiał również wyczyścić własne wpisy rejestru instalacji. Może po prostu powinieneś mieć "niepowodzenie" instalacji, aby zapobiec ich pisaniu w pierwszej kolejności.

-1

System Windows może usuwać pliki podczas uruchamiania. Można to zrobić dzwoniąc MoveFileEx lubię:

MoveFileEx(szDstFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); 

Nie jestem pewien, czy API jest dostępny w Mobile 6 lub nie. Jednak to, co faktycznie robi, to utworzenie wpisu rejestru w HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ PendingFileRenameOperations. Kluczem jest REG_MULI_SZ i wystarczy podać wartość "szDstFile \ 0 \ 0". Przy ponownym uruchomieniu system Windows usuwa plik.

Jeśli chodzi o programowe ponowne uruchamianie, spójrz na wątek this na SO.

+1

Niestety nie jest obsługiwany w ramach CE. – ctacke

1

Używam tego kodu i działa prawidłowo

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); 
Powiązane problemy