Как получить каталог установки (установленный с MSI, созданный с VS2010) при пользовательском действии удаления - PullRequest
0 голосов
/ 06 мая 2011

Итак, я создал простую msi-установку для своего приложения, используя проект установки, и добавил пару пользовательских действий, которые заботятся о таких вещах, как извлечение файлов из архивов.Теперь в моих программных файлах есть два дополнительных файла - каталог, что означает, что MSI не удалит каталог при удалении самостоятельно.Мое решение для этого было создать пользовательское действие, которое удаляет остальные файлы.

Теперь это работает просто отлично, пока каталог установки по умолчанию используется при установке.Но что, если пользователь решит изменить его?Я бы предположил, что должен быть очень простой способ прочитать каталог в настраиваемом действии, но я не совсем уверен, что это такое.такие свойства, как TARGETDIR, относятся к MSI-пакету.Тем не менее, некоторые сайты также говорят, что я должен установить это свойство самостоятельно, на этапе установки.

Все это привело меня в замешательство.В основном я вижу два способа решения этой проблемы:

1) Убедитесь, что приложение не создает файлы само по себе, и MSI позаботится об этом.Это означало бы немного больше работы, потому что я не отвечаю за эти дополнительные файлы.

2) Найдите каталог установки в пользовательском действии при удалении приложения и удалите последние биты самостоятельно.Это быстрый и грязный способ, как я его вижу, и на данный момент его вполне хватит.Но как этого добиться?

Кроме того, пока я здесь, я мог бы также задать еще один связанный с этим вопрос.Как я упоминал ранее, я извлекаю некоторые файлы при установке.Теперь я хотел бы избавиться от этих архивов, как только извлеку их.Проблема в том, что если я сделаю это, MSI будет считать, что моя установка не работает, и копировать их обратно каждый раз, когда я запускаю приложение.Так как этого избежать?

1 Ответ

1 голос
/ 06 мая 2011

Нет необходимости использовать пользовательское действие для удаления файлов. MSI встроила поддержку этого сценария в два этапа:

  1. Используйте поиск, чтобы найти файлы, которые вы хотите удалить. Вот учебник http://msdn.microsoft.com/en-us/library/aa371564(VS.85).aspx

  2. Затем вы можете запланировать операцию удаления файла, чтобы фактически удалить файлы. http://msdn.microsoft.com/en-us/library/aa371201(VS.85).aspx

Относительно вашего второго вопроса:

Не добавлять архивы в таблицу файлов. Вместо этого создайте несколько самораспаковывающихся архивов и используйте двоичные пользовательские действия для их распаковки.

http://msdn.microsoft.com/en-us/library/aa368085(VS.85).aspx

...