У меня есть коллекция приложений, которые полагаются на файлы памяти.Я создаю их с помощью постоянного приложения, затем 3 приложения обновляют файлы с помощью GPS, IMU и данных коммутатора, а 3 приложения считывают текущее состояние и генерируют команды для сервоконтроллеров.Это работало хорошо в течение многих лет, но сегодня приложения перестали работать из-за отсутствия файлов памяти, когда я запустил стороннее приложение для управления камерой c #.
Я подозреваю, что другое приложение перезаписывает область памяти.Есть ли способ защитить эти файлы памяти.
Я нахожусь в Visual Studio 2017, Win10 / 64 и .net 4.6.1
Я включил создание и пример кода для чтения и записи -все из которых работали в течение многих лет.Я обновил систему до текущей версии .net 4.6.1, и без стороннего приложения система работает часами без ошибок.Как только я запускаю скомпилированное приложение c #, файлы памяти исчезают.У меня нет доступа к исходному тексту, и я безнадежен с C #.
Теперь не знаю, одно из решений - установить новый ЦП и запустить приложение 3-х partys в отдельной коробке.Нет связи между моими приложениями и им.
I create with :
Dim LoopForever As Boolean = True
Dim AHRS_Memory_File_Name As String = "AHRSMemoryData"
Dim GPS_Memory_File_Name As String = "GPSMemoryData"
Dim Switch_Memory_File_Name As String = "SwitchMemoryData"
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim MMS = MemoryMappedFile.CreateNew(Switch_Memory_File_Name, 20,
MemoryMappedFileAccess.ReadWrite)
Dim GPS = MemoryMappedFile.CreateNew(GPS_Memory_File_Name, 200,
MemoryMappedFileAccess.ReadWrite)
Dim AHRS = MemoryMappedFile.CreateNew(AHRS_Memory_File_Name, 200,
MemoryMappedFileAccess.ReadWrite)
Do Until LoopForever = False
Thread.Sleep(10000)
Loop
End Sub
A sample Write is
Sub WriteGPS_To_Memory()
Dim GPS_MMF = MemoryMappedFile.OpenExisting(GPS_Memory_File_Name)
Dim Bytes As Byte()
' This is the format of the current gps memory message
outMessage = GPSSpeedIn & "," & GPSBearing & "," & GPSLongitude & ","
& GPSLatitude & "," & GarminMagDeviationText & "," & GPSMessageCount
& "," & GPSAltitude & ","
Bytes = StrToByteArray(outMessage)
Try
Using writer = GPS_MMF.CreateViewAccessor(0, Bytes.Length)
writer.WriteArray(Of Byte)(0, Bytes, 0, Bytes.Length)
' writer.Dispose()
End Using
Catch ex As Exception
MsgBox("mem write error = " & ex.ToString)
End Try
And a sample read is
Dim MMF = MemoryMappedFile.OpenExisting(MEMS_Memory_File_Name)
Using reader = MMF.CreateViewAccessor(0, 200,
MemoryMappedFileAccess.Read)
Dim NewByteString = New Byte(200) {}
reader.ReadArray(Of Byte)(0, NewByteString, 0,
NewByteString.Length)
InMessage = Convert.ToString(NewByteString)
teststring = ""
CycleCount = CycleCount + 1
teststring = BitConverter.ToString(NewByteString)
For i As Integer = 0 To NewByteString.Length - 1
AHRS_CommDataIn =
System.Text.Encoding.ASCII.GetString(NewByteString)
Next
End Using
MMF.Dispose()
Лучший результат - найти способ защитить эти файлы.Я в США, продавец в Израиле и не особо отзывчивый.
Это временное давление, так как моя компания использует это программное обеспечение для обнаружения водоемов, производящих комаров (ненавидящих тех вредителей), которые распространяют вирус Западного Нила, Денге и малярию.Сегодня мы убрали миссию площадью 300 кв. М., Которая затрагивает около 500 тыс. Человек.