![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: 1 Всего: 13 |
Как можно передать строку из одного приложения в другое?
-------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
Ram1reS |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 25.4.2008 Где: Москва Репутация: 2 Всего: 5 |
Файлом, БД, .net remoting, wcf, web-service, msmq, тупо сокеты, etc. ...
Это сообщение отредактировал(а) Ram1reS - 10.10.2009, 17:29 --------------------
|
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 0 Всего: 154 |
Да как угодно. Начиная от простейшего метода, через общий файл (текстовой или какой либо другой) и заканчивая специализированными технологиями для интеграции приложений.
Можешь БД использовать, можешь веб-сервис, можешь локальный сервис на компьютере, или COM взаимодействие. Все зависит от контекста и конкретной задачи.
Вот хорошая презентация на эту тему: Стратегия выбора протоколов для удаленного взаимодействия между слоями приложения -------------------- |
|||
|
||||
NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: 1 Всего: 13 |
Зачем нужно: Запускается одна копия приложения. Затем вторая. Вторая обнаруживает, что одна копия уже запущена, завершает свою работу и передаёт первой копии параметры командной строки, если они есть.
Файл не в тему, ибо не вижу смысла что-то на диске создавать для такой мелочи. БД тем более. Сокеты, remoting, wcf... не может какой-нить файрвол это дело блочить? Msmq под дотНетом есть? Добавлено через 12 минут и 58 секунд Сборку System.Messaging.dll не могу подключить. Добавляю референс, а студия пишет, что сборки нету.... ![]() -------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 0 Всего: 154 |
http://msdn.microsoft.com/ru-ru/library/sy...pDownFilterText -------------------- |
|||
|
||||
NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: 1 Всего: 13 |
А проще варинт есть?
З.Ы. Сокеты в этом деле плохи тем, что, например, какое-либо другое приложение может использовать тот же порт. -------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
Crypton |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 9.10.2006 Где: США, Санкт-Петерб ург Репутация: нет Всего: 2 |
Может лучше Mutex?
--------------------
«Все, что вы знаете — ложь» Теория мироздания |
|||
|
||||
NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: 1 Всего: 13 |
-------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 0 Всего: 154 |
С помощью мьютексов можно запретить повторный запуск приложения. Примеров в интернете много решающих эти задачи. Но это не решает вопроса о передачи строки из одного приложения, в другое. Используй реестр или временный файл. Это конечно не кошерно, но практично. А вообще для меня такого рода прблемы служат индикаторм того, что программист начинает гордить куйню. Горе от ума вообщем. Это сообщение отредактировал(а) Medved - 11.10.2009, 02:22 -------------------- |
|||
|
||||
NightmareZ |
|
||||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: 1 Всего: 13 |
А.... м....... ну я вроде не спрашивал, как запретить повторный запуск.......
Если два приложения одновременно будут писать в файл/реестр? Как передать первому экземпляру приложения информацию о том, что нужно прочитать этот файл/ветку реестра, ибо информация в нём/ней обновилась?
Ну так просвяти, как избавиться от этой проблемы? Как бы поступил ты? Это сообщение отредактировал(а) NightmareZ - 11.10.2009, 02:52 -------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
||||
|
|||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 0 Всего: 154 |
Зачем тебе запрещать запуск двух копий приложения, и если уж запрещать (что не сложно реализовать черезь мьютексы, которые как раз для таких ситуаций и придуманы), то обязательно передавать параметры командной строки от одного приложения - к другому? Вот это мне сложно понять. Откуда вообще взялось такое требование, и чем оно продиктовано? Какие обстоятельства привели тебя к тому, что ты стал решать эту проблему (передавать командную строку)? Это сообщение отредактировал(а) Medved - 11.10.2009, 05:07 -------------------- |
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 0 Всего: 154 |
Просто понимаешь, программирование существует уже относительно давно, и многие задачи уже решали до тебя другие уже 1000 раз.
Если ты изобретаешь новый язык программирования, то оно понятно, там еще нужно поломать голову, как сделать что-то, что до тебя еще никто не делал. Но все остальные вопросы уже давно обдуманы умными бородатыми дядьками, и готовые варианты реализованы в виде конкретных решений, называемых средой разработки (на уровне языков, платформ, паттернов и т.д.). Вопросы как сделать то, или другое обычно исходят от неумения или лени читать документацию, которая поставляется с платформой, на которой реализуется решение. И особенно это относятся к тем случаям, которые касаются инфраструктурного кода (в отличии от прикладного уровня, непосредственно реализующего бизнес-процессы и задачи конечного пользователя) Зачастую, задачи, которые реаются простым и изящным способом, неопытные программисты начинают решать "через америку". В смысле, что тебе надо добраться до соседнего дома в Рязани, но ты для этого фрахтуешь частный самолет, летишь через Германию, там пересаживаешься на Боинг, перелетаешь через Атлантику в Нью-Йорк, а от туда на параходе в порт Находка, потом на собачьих упряжках до Новосиба, а от туда уже на поезде до Рязани, потом на такси до нужного дома. Хотя всего-то надо было пройти 10 метров пешком. И это довольно распространенная ситуация в отечественном программировании. Отчасти это объясняется особенностями преподавания и обучения программированию на территории бывшего СНГ, когда вместо того, что обучать программированию, учат кодингу. И книги соответственно по кодированию вместо того чтобы называть их "руководство по кодингу", называют "руководство по программированию". А кодинг и программирование - это разные понятия. Так как программирование включает в себя линейку - проектирование-кодирование-тестирование. Мне вот опыт подсказывает что в данном случае возможна именна такая ситуация. Это сообщение отредактировал(а) Medved - 11.10.2009, 05:28 -------------------- |
|||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: нет Всего: 18 |
Я бы использовал System.Runtime.Remoting.Channels.Ipc
Добавлено через 6 минут и 6 секунд Medved, ИМХО, требования вполне адекватные… Мне кажется, подобным образом работают, например видеопроигрыватели, например тот же LightAlloy |
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 0 Всего: 154 |
С таким же успехом можно убить певрое (ненужное приложение) и запустить вторую копию, в которую и передаются все данные. Угу, микроскопом гвозди забивать - вот как это называется. -------------------- |
|||
|
||||
NightmareZ |
|
||||||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: 1 Всего: 13 |
Обгадили с ног до головы. Косолапый считает, что я "неопытный программист", "неумеющий и ленящийся читать документацию", "начитавшийся книг по кодингу". Вот чесно, в реальной жизни я бы предпочёл за такой подход дать по морде, но так как на форумах это не принято и физически нереализуемо, то попрошу лишь не разводить свою философию в моих темах. Ок, спасибо, попробую.
А ещё так работают, например, Paint.NET, Photoshop....
Пойди погуляй. Меня не интересует твои измышлизмы по сабжу. Я задал конкретный вопрос и хочу лишь ответа на него. -------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
||||||
|
|||||||
Medved |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 0 Всего: 154 |
NightmareZ, прости, не заметил у тебя надписи [хакер], теперь все понятно.
Твоя реакция говорит мне о том, что так и есть. Еще сомневался, теперь уж точно уверен. А как тебя еще называть? Я тебе помог, а ты вместо благодарности еще и минус залепил.
Писюн еще не вырос.
Что же ты до конца эту проблему не решил? Столкнулся со сложностью, и тут же решил сдаться? Что до конца не добил? Опытный программист предпочитает разбираться до конца, а не бежать в кусты, при первой возникшей перед ним сложности. Ммм..да. Вот и помогай после этого. Был бы поумнее, может быть и уму разуму бы научился, а так продолжай и дальше быдлокодить ![]() -------------------- |
||||||
|
|||||||
NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: 1 Всего: 13 |
Medved, уйди пожалуйста из темы.
-------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 0 Всего: 154 |
Испугался?
Посмотри первые два сообщения, в том числе и мое, там были конкретные ответы... Однако ты столкнулся со сложностью, и решил сигануть в кусты. Ты не ответил на мой вопрос: Видимо действительно нагородил... Это сообщение отредактировал(а) Medved - 11.10.2009, 14:32 -------------------- |
|||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: нет Всего: 18 |
Зачем лишний раз загружать приложение? А если оно долго грузится… кому это надо? |
|||
|
||||
Skynin |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
... а еще можно следить за буфером обмена, как то массово делают перехватыватели ссылок из браузера. Например EMule. Правда, тогда информация которая там есть потеряется, а нужно бы чтобы осталась, ведь пользователь не были инициатором записи чего-то в буфер обмена.
Clipboard Class Clipboard handling with .NET В любом случае логика рассуждений: Первая копия приложения должна ждать присылаемое: 1. Что-то постоянно опрашивать (файл, "флаг", ...) - по моему расточительно и неумно для данной задачи. 2. Слушать, авось что пришлют. По TCP/UDP, IPC, ..., Clipboard, ..., .... Если приложение оконное - получить дескриптор окна первой копии и всунуть событие в очередь его событий. Для того чтобы определиться с выбором из списка 2 - условий указано маловато. Поэтому ответ и получается - да делай шо хошь, кто ж тебя поймет, что тебе нужно то. Потому что "Затем вторая. Вторая обнаруживает" - а если в это время запускается третья, как ей счирикиваться с двумя предыдущими? Или разрешено так - увидела что две уже копии - тогда все, просто молча и выключилась?
Вот это то как раз рутинно решаемая проблема - при старте первой копии - ищется свободный порт(из диапазона, или начиная с попытки повеситься на порт по умолчанию) и записывается в такое место, из которого могут прочесть последующие копии программы.
Понятия не имею об задаче в целом. Может и задумался над вопросом "Какие обстоятельства привели меня к тому, что я стал решать эту проблему (передавать командную строку)?" Это сообщение отредактировал(а) Skynin - 11.10.2009, 18:40 |
||||
|
|||||
NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: 1 Всего: 13 |
Есть программа. Есть тип файлов, ассоциированный с этой программой. Пользователь даблкликает на файле - происходит запуск первого экзепляра программы, которому передаётся имя файла, по которому кликал юзверь, в командной строке. Если юзверь так же захочет открыть другой подобный файл, не закрывая программу, что получится? - Будет запущен второй экземпляр программы, которому будет передано имя файла. Мне нужно закрыть второй экземпляр, а первому передать инфу о том, что нужно открыть новый файл.... чтобы в первом экземпляре было загружено уже два файла. -------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
Veitmen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: 1 Всего: 4 |
Приветствую.
Я так понял это для вашего приложения - редактора? ![]() Используйте маршалинг или тупо SendMessage. Использовать Remoting, MSMQ, WCF or WebServices в данном случае бессмысленно, это и правда забивать микроскопом гвозди. Копипаст с другого форума: 1. Посылка сообщений. Один процесс вызывает SendMessage или PostMessage, другой процесс GetMessage. Все очень просто, передается 3 слова: сообщение, lparam и wparam. 2. Посылка прерываний (сигналов, если следовать терминологии *nix). Один процесс вызывает какую-то функцию системы, передает ей PID и номер сигнала. Система прерывает выполнение программы-получателя и переходит к выполнению какой-то части программы, называемой обработчиком прерывания. Как только обработчик закончит выполнение — программы продолжает работать с той точки где была прервана. 3. Каналы ввода-вывода. Все очень просто. Один процесс пишет в канал, другой читает. Можно передавать сколь угодно данных, на любой скорости. Проблема только в том, как соорудить этот канал данных. Можно при запуске переопределить STDIN и STDOUT или передать дескриптор канала по наследству, это если один процесс запускает другой. Можно использовать именованные каналы (если позволяет система). Можно использовать сокеты. 4. Файлы отображаемые в память. Ни разу не пользовался. Но, как я понимаю некоторая часть памяти ставится в соответствие файлу чтение этой памяти приводит к чтению из файла, запись в память — к записи в файл. 5. Маршалинг (передача буфера через границы процессов средствами системы) Идея простая, но описание грубое. Берем буфер (в памяти одного процесса) и передаем его системе. В другом процессе выделяем в виртуальной памяти место для буфера и запрашиваем у системы этот самый буфер. Система копирует данные из одного процесса в другой. |
|||
|
||||
NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: 1 Всего: 13 |
Взаимно ![]() Да ![]() Маршалинг? А как его тут можно использовать? А SendMessage не особо удобно. Сейчас сделал через временные файлы. Первый экземпляр мониторит директорию, находащуюся в LocalApplicationData, а остальные пишут туда инфо о тех файлах, которые нужно загрузить. Это сообщение отредактировал(а) NightmareZ - 13.10.2009, 02:48 -------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
Veitmen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: 1 Всего: 4 |
Да и правда, маршалинг вам тут не поможет. Хотя поизвращаться можно. ![]() Безусловно, но если вы не хотели бы использовать файл то можно так. Нормальное решение. Так и нужно, и не надо тут что нить городить. Удачи вам с вашим редактором. Слежу с интересом, надеюсь на фриварную версию. ![]() |
|||
|
||||
NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: 1 Всего: 13 |
-------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
nyxiscoo1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 15.6.2008 Репутация: нет Всего: нет |
Есить готовое решение для VB .Net, но его можно использовать и в C#
http://www.codeproject.com/KB/cs/CSSIApp.aspx |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |