#c #windows
#c #Windows
Вопрос:
Я разрабатываю приложение в Windows с использованием vs2005 c и хочу связать расширение файла с приложением, что я могу сделать в настройках реестра. Однако, когда я нажимаю на файл, я хочу связать его с запущенным экземпляром моего приложения, а не запускать новый. Как я могу добиться такого поведения.
Ответ №1:
Я не могу дать вам реализацию с самого начала, но посмотрите на то, что называется «межпроцессное взаимодействие» (обычно с использованием COM, если вы используете Windows). Что вы можете сделать, так это при запуске вашей программы проверить наличие других копий самой себя, если она найдет одну, то сообщит ей, какой файл вы хотели открыть, а затем выключится.
Я нашел реализацию для вас:
Ответ №2:
Раньше это делалось с помощью параметра в winmain, но из msdn
Дескриптор предыдущего экземпляра приложения. Этот параметр всегда равен нулю. Если вам нужно определить, существует ли уже другой экземпляр, создайте мьютекс с уникальным именем, используя функцию CreateMutex. CreateMutex завершится успешно, даже если мьютекс уже существует, но функция вернет ошибку ERROR_ALREADY_EXISTS. Это указывает на то, что существует другой экземпляр вашего приложения, поскольку он создал мьютекс первым. Однако злоумышленник может создать этот мьютекс раньше вас и помешать запуску вашего приложения. Чтобы предотвратить эту ситуацию, создайте мьютекс с произвольным именем и сохраните имя так, чтобы оно могло быть получено только авторизованным пользователем. В качестве альтернативы вы можете использовать файл для этой цели. Чтобы ограничить ваше приложение одним экземпляром на пользователя, создайте заблокированный файл в каталоге профиля пользователя.