Лучший способ сделать так, чтобы exe можно было запустить только один раз - PullRequest
6 голосов
/ 17 октября 2008

У меня есть приложение Visual Basic, которое сильно портится, если установка запускается более одного раза. Кажется, что иногда клиент ошибается установщиком для быстрого доступа к нему позже в будущем, снова запускает установщик, и он все испортил. Я не могу понять, почему, поэтому я решил, что самый простой способ - это сделать так, чтобы исполняемый файл мог запускаться только один раз на машине, иначе он просто закончится. Есть идеи?

Ответы [ 11 ]

6 голосов
/ 28 октября 2008

Почему бы вам НЕ ИСПРАВИТЬ установщик или какие-либо другие проблемы, вместо того, чтобы попытаться взломать, чтобы избежать этого ...

Только мои $ .02

3 голосов
/ 17 октября 2008

Попросите установщика поместить файл в папку приложений.

При повторном запуске проверьте этот файл, если он существует, отобразите всплывающее окно «Уже установлено» и выйдите.

2 голосов
/ 20 октября 2008

Предполагая, что это вопрос VB6, вы можете использовать встроенный App.PrevInstance.

Документация: http://msdn.microsoft.com/en-us/library/aa268085(VS.60).aspx

App.Previnstance возвращает True, если ваше приложение уже запущено.

В событии загрузки вашей стартовой формы или на вашей основной странице:

Private Sub Form_Load()
    If App.PrevInstance = True Then
        MsgBox "Already running"
        'Do whatever you need to do before closing
    End If
End Sub

Если вы хотите сделать еще один шаг вперед и вывести предыдущий экземпляр на передний план, вы можете просмотреть следующие статьи:

http://www.planet -source-code.com / VB / скрипты / ShowCode.asp? TxtCodeId = 21131 & lngWId = 1

http://support.microsoft.com/kb/185730

1 голос
/ 09 ноября 2008

В установщике приложения

' Test eventual mark, settings in the registry.
if GetSetting("MyInstallerApp","Startup","BeenHere",0) = 1 then
    MsgBox "This installer was ran once already... first run the un-installer."
    End ' or some other code to properly exit the installer
EndIf
Call SaveSetting ("MyInstallerApp","Startup", "BeenHere", 1) 'leave a mark for future

В приложении удаления (или в параметре «удаления» установщика)

' Allow future Installer to run again
Call DeleteSetting("MyInstallerApp", "Startup")
1 голос
/ 28 октября 2008

Установщик должен создать запись в реестре. Откажитесь от установки (снова), если запись реестра уже существует.

Как именно этого добиться, будет зависеть от используемой вами программы установки.

1 голос
/ 28 октября 2008

Если вы используете .net, то Mutex - ваш друг здесь.

Никогда, никогда не используйте метод Process.GetProcessesByName. Позже вы возненавидите себя за использование того, что требует прав администратора

private bool CanIStart
{

        try
            {
                MyAppMutex= new Mutex(false, "myAppMutex", out createdNew);
                if(MyAppMutex.WaitOne(0,false))
                {
                    return true;
                }
                else
                {
                    MyAppMutex = null;
                    return false;
                }

            }
            catch(ApplicationException ex)
            {
                // we couldn't create the mutex. // log the error if you care
                return false;               
            }
}
1 голос
/ 18 октября 2008

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

Я думал, что это было интересно, поэтому я погуглил это, похоже на некоторую хорошую информацию об этом посте:

http://www.autohotkey.com/forum/topic1572.html

0 голосов
/ 18 ноября 2008

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

0 голосов
/ 13 ноября 2008

Меня поражает, что оставить приложение, которое не должно запускаться более одного раза, - это все равно, что оставить большую красную кнопку где-нибудь на столе у ​​кого-то, что при нажатии на нее взрывается. Не круто.

У большинства инсталляторов есть возможность не предлагать повторную установку. Сначала проверьте это - это кажется лучшим и наиболее очевидным решением.

Что сильно запутано? Чем второй запуск установщика отличается от первого запуска с точки зрения вашего приложения? Это также должно быть учтено в вашем коде.

0 голосов
/ 28 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...