Проект установки и удаления .NET - PullRequest
0 голосов
/ 06 августа 2009

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 12 октября 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, но я не хотел это изучать.

1 голос
/ 08 сентября 2010

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

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

1 голос
/ 06 августа 2009

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

@echo off
msiexec /x %1

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

...