App.PrevInstance

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

App.PrevInstance

Сообщение Nicky » 29.11.2006 (Ср) 18:30

Давно интересует вопрос: что происходит на старте программы, после чего в App.PrevInstance выставляется сами_знаете_что, и почему такая зависимость от папки с программой?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 30.11.2006 (Чт) 1:30

The GetModuleFileName function retrieves the full path and filename for the executable file containing the specified module.

Перебираются все процессы, и App.PrevInstance выставляется в зависимости от того, найден ли хоть один процесс с таким же полным именем исполняемого файла (путь+имя).

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 30.11.2006 (Чт) 7:32

Спасибо. Но у меня бывали ситуации, когда после снятия поцесса через диспетчер задач программа повторно не запускалась (Первой строкой идет If App.PrevInstance Then End. Судя по тому, что вы сказали, так быть не должно?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.11.2006 (Чт) 8:52

Amed писал(а):Перебираются все процессы, и App.PrevInstance выставляется в зависимости от того, найден ли хоть один процесс с таким же полным именем исполняемого файла (путь+имя).

Откуда такие сведения?
Изображение

_ae_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 165
Зарегистрирован: 08.10.2006 (Вс) 14:37

Сообщение _ae_ » 30.11.2006 (Чт) 10:41

Amed
Вообще-то это параметр функции winmain, что навело тебя на мысли о таких извращениях-то?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.11.2006 (Чт) 10:47

Вообще-то в функцию WinMain этот параметр передаёт сишный рантайм, а не Винда.
Так что низачот.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.11.2006 (Чт) 10:55

На самом-то деле, каждая прога при запуске создаёт семафор с именем вида Replace(UCase(GetModuleFileName(0)), "\", "?")
Кто не верит -- пусть проверит procexp-ом, либо заглянет в процедуру "int __stdcall _SetupPrevInst(char *)" в моём символьно дизассемблированном msvbvm60.

Так что Amed-у тоже низачот. Кроме прочего, одной из целевых платформ для VS6 была WinNT4, а там нет документированного способа перебрать все процессы.
Изображение

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 30.11.2006 (Чт) 15:04

Во-во, семафор. Именно по причине живучести семафора при снятии процесса я и отказался от такого способа проверки повторного запуска. И тут на тебе!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 30.11.2006 (Чт) 15:19

Это было предположение, а не утверждение.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.11.2006 (Чт) 15:38

Нигде из твоего поста не следовало, что это предположение.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.12.2006 (Пн) 18:22

tyomitch писал(а):Вообще-то в функцию WinMain этот параметр передаёт сишный рантайм, а не Винда.
Так что низачот.

Надо же, и как раз об этом сегодня пишет Чен!
http://blogs.msdn.com/oldnewthing/archi ... 05831.aspx
Although the function WinMain is documented in the Platform SDK, it's not really part of the platform.
Изображение


Вернуться в Раздел для Профессионалов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList