2011-02-01 4 views
2

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

Я нашел несколько примеров WiX, которые работают в некоторой степени.

Он работает очень хорошо со стандартной программой Windows (блокнот), но когда я пытаюсь запустить свою собственную программу, она не работает. Я думаю, что проблемы в том, что программа удаляется, прежде чем она будет запущена.

Я попытался напечатать журналы, но они не дали мне никаких подсказок о том, что делать.

Мой код до сих пор:

<CustomAction Id="LaunchFeedBackForm" 
ExeCommand="notepad.exe" Directory="INSTALLDIR" 
Return="asyncWait" >REMOVE="ALL"</CustomAction> 


<InstallExecuteSequence> 
    <Custom Action="LaunchFeedBackForm" After="InstallValidate"/> 
</InstallExecuteSequence> 

Так что мне нужно каким-то образом деинсталлировать процесс, чтобы остановить или что-либо, пока пользователь не закроет форму обратной связи. После того, как форма была закрыта, она должна продолжить и удалить все программное обеспечение, включая программу формы обратной связи.

ответ

1

Если ваш EXE находится в MSI, попробуйте использовать атрибут FileKey: http://wix.sourceforge.net/manual-wix2/wix_xsd_customaction.htm

Например, если ваш EXE определяется следующим образом:

<File Id="FeedbackExe" Name="FeedbackExe.exe"/> 

вы можете использовать:

<CustomAction Id="LaunchFeedBackForm" 
FileKey="FeedbackExe" Execute="deferred" 
Return="asyncWait">REMOVE="ALL"</CustomAction> 

Вы также можете попробовать создать журнал деинсталляции, чтобы узнать, что происходит с пользовательским действием:

msiexec.exe /x <ProductCode> /L*V "C:\uninstall.log" 

где вы используете свой товарный код.

+0

Привет, Спасибо за ваш ответ. Я пробовал это, но тоже не работает. Мне кажется, что он вообще не запускается, но я вижу действие в журнале. Я работаю с программами, не включенными в файл msi, но оставить программу после удаления на целевой машине, довольно yucky. – JakobJ

+0

Если он запускается сразу после InstallValidate, он может использовать установленные файлы, потому что они еще не удалены. Вы можете попробовать сохранить файл в двоичной таблице, но я не думаю, что это проблема. Попробуйте отладить EXE (присоединить к его процессу) и посмотреть, что произойдет. Кроме того, попробуйте опубликовать полный журнал, чтобы мы могли посмотреть. –

+0

Hi Опять же, я пошел с решением для браузера (открытие веб-страницы). Это также было довольно сложно, пришлось запустить cmd start ..., чтобы заставить его работать. Но я думаю, что Ян Скляренко был прав в своих отзывах и поэтому выбрал это решение. Но спасибо за ваш ответ. :-) – JakobJ

4

Способ, которым вы хотите получить обратную связь пользователя, кажется мне неестественным. Если я правильно вас понимаю, вы хотите показать эту форму обратной связи и подождать, пока пользователь ее заполнит, а затем продолжит деинсталляцию, правильно?

К моему собственному опыту, когда пользователь решает удалить программное обеспечение, он/она хотел бы, чтобы он был удален как можно быстрее и яснее. Приведение формы «должно заполнить» перед ними будет только отрицательно влиять на работу пользователя. Более того, как вы можете видеть, это сложнее с технической точки зрения. Полагаю, вы тоже подумали о передаче этой обратной связи на свою сторону, верно? Это электронная почта, введенная пользователем? Как вы обеспечиваете отправку электронной почты?

Кроме того, вы можете получить эту форму онлайн на определенной веб-странице своего сайта и запустить ее, когда удаление выполнено (НЕ выполняется). Таким образом, вы не раздражаете пользователя, блокирующего процесс удаления.

Итак, я хотел бы сделать следующее:

  • имеют настраиваемое действие, которое запускает браузер с URL нужно
  • программа установки не должны ждать этого, чтобы завершить

BTW, не ожидайте большой обратной связи - люди редко беспокоят расходы некоторое время, чтобы дать отзыв :)

+0

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

+0

Тогда попробуйте сделать свою форму обратной связи не сосать :) И удачи! –

+0

Это деловое решение и хорошее. и вы здесь полностью здесь. Он уезжает, и вам все равно, если вы его разозлите еще немного. На самом деле вы хотите, чтобы сердитые люди честно рассказывали вам, почему они сосать вашу программу. В то время, когда я использовал эту технику, я получил полезную информацию. Я не могу преобразовать их в клиентов, но, возможно, других. – Lothar

0

So Мне нужно каким-то образом остановить установку или что-либо еще, , пока пользователь не закрыл форму обратной связи. После закрытия формы он должен продолжить и удалить все программное обеспечение, включая программу обратной связи .

Для этого можно было бы установить после = «InstallValidate» атрибут

<InstallExecuteSequence> 
<Custom Action="InstallCustomLogic" After="InstallFinalize" /> 
<Custom Action="UninstallCustomLogic" 
After="InstallValidate" > 
NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL") 
</Custom> 
</InstallExecuteSequence> 

Set Вернуться проверить, так что установщик не остановится, пока указанные исполняемыми возвраты.

<CustomAction Id="UninstallCustomLogic"    
Directory="INSTALLFOLDER"    
ExeCommand="[INSTALLFOLDER]\RetailConnectCustomLogic.exe uninstall" 
Return="check"    
/> 

Это полезно в случае, если перед удалением программы необходимо запустить что-то, находящееся в каталоге программы. Можно также установить атрибут игнорировать, если он не возвращается 0

Смежные вопросы