Сам удаляемое приложение в C# в одном исполняемом файле

Другие плакаты, вероятно, корректны... могли бы быть пробелы, смешанные в с Вашими вкладками. Попытайтесь делать поиск & замените к замене все вкладки с несколькими пробелами.

Попытка это:

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)
29
задан George 20 August 2009 в 11:26
поделиться

6 ответов

Если вы используете 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); 

Фрагмент кода взят из этой статьи

34
ответ дан 28 November 2019 в 01:36
поделиться

Сложно не вводить еще один процесс (который, без сомнения, вы также захотите удалить). В вашем случае у вас уже есть 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 ):

5
ответ дан 28 November 2019 в 01:36
поделиться

Не могли бы вы просто удалить программу обновления из приложения? например:

Приложение: Пуск -> [Удалить старое средство обновления, если оно есть] -> Проверить версию -> Загрузить новое средство обновления -> Запустить средство обновления -> выйти;

Средство обновления: Пуск -> Выполнить обновление -> Запустить приложение -> exit;

Приложение: Пуск -> [Удалить старую программу обновления, если она есть] -> ...

3
ответ дан 28 November 2019 в 01:36
поделиться

Ммм, позвольте мне уточнить это. У вас есть application.exe и ваше приложение Updater.exe?

Итак, когда вы запускаете application.exe, он проверяет наличие новой версии на каком-то веб-сервере, а затем запускает updater.exe. И вы хотите, чтобы updater.exe удалил себя после завершения обновления? Или вы хотите удалить скачанный патч (или аналогичный)? Пожалуйста, будьте немного точнее.

Учтите, что при удалении updater.exe вы должны воссоздать его для следующего процесса обновления.

0
ответ дан 28 November 2019 в 01:36
поделиться

ваша вторая строка может быть

Updater: Star -> do it's work -> start Application Executable -> Updater Exits -> Application deletes your Updater.exe
0
ответ дан 28 November 2019 в 01:36
поделиться

Я предлагаю вам использовать командный файл в качестве начальной загрузки, а затем удалить себя и исполняемый файл

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()
    {
        .....
    }
}
9
ответ дан 28 November 2019 в 01:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: