2013-09-16 2 views
2

У меня есть пользовательский загрузчик (Bootstrapper - Setup.exe и пользовательская библиотека BA - CustomBA.dll), который можно запустить как несколько экземпляров.Пользовательский bootstrapper как один экземпляр

Чтобы разрешить пользователю открывать только один экземпляр, я попытался проверить имя процесса в библиотеке Custom BA. Я могу проверить ProcessName (Setup.exe), но он делает это для самого первого экземпляра, и выход из Custom BA не закрывает Setup.exe.

Есть ли встроенный способ WiX для проверки экземпляра в самом Bootstrapper? Если нет, есть ли способ проверить его в библиотеке Custom BA?

+0

Вам нужно получить идентификатор вашего процесса вместо имени. Может быть несколько запущенных Setup.exe, но каждый из них получил уникальный идентификатор. Попробуйте использовать функцию GetCurrentProcessId. См. Подробности: https://msdn.microsoft.com/en-us/library/windows/desktop/ms683180(v=vs.85).aspx –

ответ

0

Если вы используете настраиваемый загрузчик C++, вы можете попробовать создать именованный мьютекс и проверить, существует ли этот мьютекс. В моем установщике я делаю эту проверку в потоке пользовательского интерфейса. В этом случае вторая копия установщика закрывается без каких-либо сообщений об ошибках.

+1

Вы хотите быть очень осторожным, чтобы ваш мьютекс не предотвращал обновление от происходящего. Вы хотите установить условие обновления или условия для блокировки одного и того же идентификатора пакета. –

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