2010-04-10 4 views
3

Если я контролирую оба приложения, то как лучше всего общаться между 2 exe, написанными на VB.Net. Например, я хочу удалить XML-файл из одного приложения и забрать его с другим, но мне не нужен опрос для файла. Я слышал об именованных каналах, но обнаружил, что это сложно. Какой самый эффективный способ сделать это?Лучший способ общения между приложениями .Net?

+1

Уверены ли вы, что вы имеете в виду «наиболее эффективные», а не «лучшие практики»? Если вы действительно хотите «наиболее эффективно», вы, вероятно, должны держаться подальше от всего XML. –

+1

«Самый эффективный» определенно начинается с * not *, используя два отдельных процесса. –

ответ

4

Вам не нужно регистрировать этот файл. Используйте FileSystemWatcher.

+0

+1 - избили меня! –

+2

Я читал, что FileSystemWatcher не всегда надежный, и иногда вы можете потерять некоторые изменения. Если вы идете по этому маршруту, вы все равно можете периодически опробовать, чтобы убедиться, что вы ничего не пропустили. Источник: http://stackoverflow.com/questions/239988/filesystemwatcher-vs-polling-to-watch-for-changes –

+0

Что-то построенное на FileSystemWatcher может иметь проблемы с условиями гонки. Это все равно может быть самым простым решением, но @ajl обязательно придумает что-то, чтобы этого избежать. Возможно, используйте расширение «.partial» для файлов XML, которые все еще записываются первой программой, а вторая программа может избежать файлов с этим расширением. –

3

Один простой способ - использовать WCF. Приложение-получатель может содержать простой сервис WCF, и отправитель может отправить ему файл.

1

. NET 4 включает поддержку memory-mapped files. С их помощью вы можете даже отказаться от необходимости использовать файловую систему. Однако, если процессы не работают на одном компьютере, вам придется использовать другой подход (как упоминалось другими, WCF будет хорошим).

0

Если вы можете редактировать файл с расширением .exe здесь является самым простым способом:

Добавить объект FileSystemWatcher в одном из EXE-файл и установить фильтр на определенный файл, например, «Commands.txt»

FileSystemWatcher1.Path = Application.StartupPath 
FileSystemWatcher1.NotifyFilter=NotifyFilters.LastWrite 
FileSystemWatcher1.Filter = "Commands.txt" 
FileSystemWatcher1.EnableRaisingEvents = True 

Чтобы звезда мониторинга/остановки, установите путь и свойство EnableRaisingEvents к истинным или ложным

Это событие, которое возникает при изменении файла:

Private Sub FileSystemWatcher1_Changed(sender As System.Object, e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher1.Changed 
    'Open the file and read the content. 
    'you can use your own commands 
End Sub 

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


Другой файл .exe, просто должны написать команды или сообщение, которое вы хотите отправить: Этот пример записывает текущий DateTime переписав файл каждый раз.

Dim Timestamp() As Byte = System.Text.Encoding.Default.GetBytes(Now.ToString) 
Dim Fs As System.IO.FileStream 
Fs = New System.IO.FileStream("Commands.txt", FileMode.Create, FileAccess.Write) 
Fs.Write(Timestamp, 0, Timestamp.Length - 1) 
Fs.Close() 

Done!

Смежные вопросы