Другие плакаты, вероятно, корректны... могли бы быть пробелы, смешанные в с Вашими вкладками. Попытайтесь делать поиск & замените к замене все вкладки с несколькими пробелами.
Попытка это:
import sys
def Factorial(n): # return factorial
result = 1
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
print Factorial(10)
Если вы используете Process.Start, вы можете передать параметр Del
и путь к приложению, которое вы хотите удалить.
ProcessStartInfo Info=new ProcessStartInfo();
Info.Arguments="/C choice /C Y /N /D Y /T 3 & Del "+
Application.ExecutablePath;
Info.WindowStyle=ProcessWindowStyle.Hidden;
Info.CreateNoWindow=true;
Info.FileName="cmd.exe";
Process.Start(Info);
Фрагмент кода взят из этой статьи
Сложно не вводить еще один процесс (который, без сомнения, вы также захотите удалить). В вашем случае у вас уже есть 2 процесса - updater.exe и application.exe. Я бы, вероятно, просто попросил приложение удалить updater.exe, когда он появится оттуда - вы можете использовать простой аргумент командной строки или вызов IPC от updater.exe к application.exe, чтобы запустить его. Это не совсем самоудаление EXE, но я думаю, что он удовлетворяет требованиям.
Для полного описания и других опций вы должны прочитать подробное описание самоудаления EXE . Примеры кода находятся на C (или ASM), но должны быть вызваны p /.
Я бы, вероятно, попробовал CreateFile с FILE_FLAG_DELETE_ON_CLOSE
для updater.exe с чем-то вроде (psuedo code ):
Не могли бы вы просто удалить программу обновления из приложения? например:
Приложение: Пуск -> [Удалить старое средство обновления, если оно есть] -> Проверить версию -> Загрузить новое средство обновления -> Запустить средство обновления -> выйти;
Средство обновления: Пуск -> Выполнить обновление -> Запустить приложение -> exit;
Приложение: Пуск -> [Удалить старую программу обновления, если она есть] -> ...
Ммм, позвольте мне уточнить это. У вас есть application.exe и ваше приложение Updater.exe?
Итак, когда вы запускаете application.exe, он проверяет наличие новой версии на каком-то веб-сервере, а затем запускает updater.exe. И вы хотите, чтобы updater.exe удалил себя после завершения обновления? Или вы хотите удалить скачанный патч (или аналогичный)? Пожалуйста, будьте немного точнее.
Учтите, что при удалении updater.exe вы должны воссоздать его для следующего процесса обновления.
ваша вторая строка может быть
Updater: Star -> do it's work -> start Application Executable -> Updater Exits -> Application deletes your Updater.exe
Я предлагаю вам использовать командный файл в качестве начальной загрузки, а затем удалить себя и исполняемый файл
public static class Updater
{
public static void Main()
{
string path = @"updater.bat";
if (!File.Exists(path))
{
// Create a file to write to.
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine("updater.exe");
sw.WriteLine("delete updater.exe /y");
sw.WriteLine("delete updater.bat /y");
}
System.Process.Start(path);
}
else
{
RunUpdateProcess();
}
}
private void RunUpdateProcess()
{
.....
}
}