Проект установки .NET и программа удаления

Я создал проект установки VS для своего приложения. Он устанавливает приложение в указанное пользователем место и создает несколько ярлыков в меню «Пуск». Он также создает запись в Панели управления / Установка и удаление программ, которую можно использовать для удаления приложения.

Я хотел бы знать, есть ли способ создать запись в меню «Пуск» (рядом с другими записями, созданными с помощью установки), которая могла бы удалить мое приложение.

Пока что я нашел одно решение, но использовать его сложно: я создал uninstall.bat файл, который развертываю в папке своего приложения, и добавляю к нему ярлык. Содержимое *.bat выглядит так:

@echo off
msiexec /x {0B02B2AB-12C6-4548-BF90-F754372B0D36}

Что мне не нравится в этом решении, так это то, что каждый раз, когда я обновляю код продукта своего приложения (я делаю это всякий раз, когда обновляю свою версию приложения, как предлагает VS), мне приходится вручную редактировать этот файл перед созданием проекта установки и вводить исправьте новый код продукта.

Кто-нибудь знает более простой способ добавить деинсталлятор в приложение?


person RaYell    schedule 06.08.2009    source источник
comment
robmensching.com/blog/posts/2007/4/27/   -  person Christopher Painter    schedule 20.08.2010


Ответы (3)


Вы можете отредактировать файл .bat, чтобы принять аргумент.

@echo off
msiexec /x %1

В проекте установки, где вы определяете ярлык, добавьте свойство [ProductCode] в качестве аргумента.

person Magnus Johansson    schedule 06.08.2009
comment
Наверное. Но разве нет более элегантного способа сделать это? Я бы с радостью удалил весь bat файл и оставил создание деинсталлятора полностью для установки проекта. - person RaYell; 06.08.2009
comment
В этом случае я бы порекомендовал вам вместо этого использовать WiX. - person Magnus Johansson; 06.08.2009

У меня была именно такая проблема.

Я сделал вот что:

  • предоставьте файл uninstall.bat. Этот файл устанавливается безоговорочно
  • предоставить в установщике настраиваемое действие, которое перезаписывает файл uninstall.bat и вставляет правильный код продукта.

вот сценарий, который запускается как настраиваемое действие. Он перезаписывает файл uninstall.bat, а затем удаляет себя.

// CreateUninstaller.js
//
// Runs on installation, to create an uninstaller
// .cmd file in the application folder.  This makes it
// easy to uninstall. 
//
// Mon, 31 Aug 2009  05:13
//

var fso, ts;
var ForWriting= 2;
fso = new ActiveXObject("Scripting.FileSystemObject");

var parameters = Session.Property("CustomActionData").split("|"); 
var targetDir = parameters[0];
var productCode = parameters[1];

ts = fso.OpenTextFile(targetDir + "uninstall.cmd", ForWriting, true);


ts.WriteLine("@echo off");
ts.WriteLine("goto START");
ts.WriteLine("=======================================================");
ts.WriteLine(" Uninstall.cmd");
ts.WriteBlankLines(1);
ts.WriteLine(" This is part of MyProduct.");
ts.WriteBlankLines(1);
ts.WriteLine(" Run this to uninstall MyProduct");
ts.WriteBlankLines(1);
ts.WriteLine("=======================================================");
ts.WriteBlankLines(1);
ts.WriteLine(":START");
ts.WriteLine("@REM The uuid is the 'ProductCode' in the Visual Studio setup project");
ts.WriteLine("%windir%\\system32\\msiexec /x " + productCode);
ts.WriteBlankLines(1);
ts.Close();


// all done - try to delete myself.
try 
{
    var scriptName = targetDir + "createUninstaller.js";
    if (fso.FileExists(scriptName))
    {
        fso.DeleteFile(scriptName);
    }
}
catch (e2)
{
}

Думаю, я мог бы сделать это с помощью WiX, но я не хотел этому учиться.

person Cheeso    schedule 12.10.2009

Другой вариант - вызвать msiexec для удаления из самого приложения, если указан определенный аргумент командной строки - см. Приведенный здесь пример для получения дополнительных сведений: http://endofstream.com/creating-uninstaller-in-a-visual-studio-project/

Сделав это таким образом, вы не будете вынуждены видеть командную строку при удалении :)

person Peter    schedule 08.09.2010