内存文件被第三方软件破坏

问题描述 投票:2回答:1

我有一组依赖内存文件的应用程序。我使用持久应用程序创建它们,然后3个应用程序使用GPS,IMU和交换机数据更新文件,3个应用程序读取当前状态并生成伺服控制器的命令。多年来一直运行良好,但是当我启动第三方c#相机控制应用程序时,由于缺少内存文件,应用程序失败了。

我怀疑其他应用程序会覆盖内存区域。有没有办法保护这些内存文件。

我在Visual Studio 2017,Win10 / 64和.net 4.6.1

我已经包含了创建和示例读写代码 - 所有这些代码已经工作了多年。我确实将系统更新为当前的.net 4.6.1,没有第三方应用程序,系统运行数小时没有错误。我启动c#app编译app的瞬间内存文件消失了。我没有访问源代码,并且对C#没有希望。

现在不是一个线索,一个解决方案是安装一个新的CPU并在一个单独的盒子上运行第三方应用程序。我的应用程序与它之间没有通信。

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平方英里的任务,影响了大约50万人。

vb.net memory-management file-io
1个回答
0
投票

这个问题显然出现在第三方软件中 - 他们在我们将问题发布到他们的支持网站的那天发布了更新的程序 - 所以我们一定不能只访问这个问题的网站

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.