Перезапуск программы
BOOL InitInstance()
{
CWnd *PrevCWnd = CWnd::FindWindow(NULL, "MyProgram");
if(PrevCWnd != NULL){
::MessageBox(NULL,"Программа уже запущена!"," Отказ в запуске...",MB_ICONSTOP);
return FALSE;
}
...
return FALSE;
}
Как быть?
Необходимо перезапустить программу, но в ней есть Мьютекс для предотвращения запуска второй копии:
BOOL InitInstance()
{
CWnd *PrevCWnd = CWnd::FindWindow(NULL, "MyProgram");
if(PrevCWnd != NULL){
::MessageBox(NULL,"Программа уже запущена!"," Отказ в запуске...",MB_ICONSTOP);
return FALSE;
}
...
return FALSE;
}
Как быть?
Первое что пришло на ум, создать еще одну программу. Из главной будет запускаться дополнительная программа, соответсвенно завершаться текущая. И эта дополнительная программа должна будет завново запускать первую прогу и завершать себя.
Первое что пришло на ум, создать еще одну программу. Из главной будет запускаться дополнительная программа, соответсвенно завершаться текущая. И эта дополнительная программа должна будет завново запускать первую прогу и завершать себя.
А на всех ли Windows этот прием будет работать?
Я где-то читал, что в какой-то версии Windows при завершении программы автоматом закрываются порожденные ею потоки...
Необходимо перезапустить программу, но в ней есть Мьютекс для предотвращения запуска второй копии:
BOOL InitInstance()
{
CWnd *PrevCWnd = CWnd::FindWindow(NULL, "MyProgram");
if(PrevCWnd != NULL){
::MessageBox(NULL,"Программа уже запущена!"," Отказ в запуске...",MB_ICONSTOP);
return FALSE;
}
...
return FALSE;
}
Как быть?
А где здесь mutex?
Можешь запустить прогу с каким-то параметром. Если есть параметр, тогда посылает первой копии SYSCOMMAND WM_CLOSE.
Можешь запустить прогу с каким-то параметром. Если есть параметр, тогда посылает первой копии SYSCOMMAND WM_CLOSE.
А как мне понять где какая копия? Ведь я могу прогу перезапускать несколько раз!
А как мне понять где какая копия? Ведь я могу прогу перезапускать несколько раз!
А зачем?
А зачем?
По запуску прога собирается по кусочкам из DLL. Пользователь может сам настраивать что ему нужно и какие пункты меню где должны быть (начальство так хочет). Перезапуск помоему проще всего...
По запуску прога собирается по кусочкам из DLL. Пользователь может сам настраивать что ему нужно и какие пункты меню где должны быть (начальство так хочет). Перезапуск помоему проще всего...
Перед перезапуском измени заголовок убиваемой программы. Напр.
CWnd *PrevCWnd = CWnd::FindWindow(NULL, "MyProgramOld");
И тогда и параметр не нужен будет.
Перед перезапуском измени заголовок убиваемой программы. Напр.
CWnd *PrevCWnd = CWnd::FindWindow(NULL, "MyProgramOld");
И тогда и параметр не нужен будет.
Что-то FindWindow() перестала искать заголовок, наверное это связано с тем, что окно спрятано в системный трей...
Буду пробовать Мьютекс...
Что-то FindWindow() перестала искать заголовок, наверное это связано с тем, что окно спрятано в системный трей...
Буду пробовать Мьютекс...
А mutex что тебе даст??? :)
А mutex что тебе даст??? :)
Вот статью нашел:
http://www.zevs.hobi.ru/showdoc.phtml?link=Docs/VC/avins/avins.xml.htm