1

问题

如何通过环境变量(不是系统或用户变量)与另一个程序(例如,Windows 服务)进行通信?

我们有什么

好吧,我有以下数据记录器方案:

-------------------------          --------------------------------
| the things to measure |          | the things that do something |
-------------------------          --------------------------------
     |                                  ^
     | sensors                          | switches
     V                                  |
-------------------------------------------------------------------
|                     dedicated hardware                          |
-------------------------------------------------------------------
     | ^
     | |  serial communication 
     V |
---------------                                       -------------
|   Windows   | ------------------------------------> |   user    |
|   service   | <------------------------------------ | interface |
---------------           udp communication           -------------
                                                            |^  keyboard
                                                            V| and screen
                                                         --------
                                                         | user |
                                                         --------

关于目前的发展:

  • Windows 运行时,windows 服务始终在运行
  • 用户可以打开和关闭用户界面(当然:p)
  • Windows 服务从传感器获取数据
  • 用户界面每隔 100ms 自动向 Windows 服务请求数据,并通过 udp 通信通过一些已实现的协议向用户显示(我们称之为GetData()命令和响应)
  • 用户可以通过实现的协议发送一些其他命令来更改要获取的数据(我们称之为SetSensors()命令和响应)

用户界面和 Windows 服务都是在 Borland C+ Builder 6 上开发的,并使用 FastNet 选项卡中的 NMUDP 组件进行 UDP 通信。

我们想做什么

由于一些缓冲区问题和释放 udp 通道仅用于发送SetSensors()命令和响应它,我们正在考虑使用它而不是使用GetData()

  • Windows 服务将从传感器获取数据并将它们放在环境变量中
  • 用户界面会读取它们以显示给用户

做我们所想的之后的计划

-------------------------          --------------------------------
| the things to measure |          | the things that do something |
-------------------------          --------------------------------
     |                                  ^
     | sensors                          | switches
     V                                  |
-------------------------------------------------------------------
|                     dedicated hardware                          |
-------------------------------------------------------------------
     | ^
     | |  serial communication 
     V |
---------------                                       -------------
|             | ------------------------------------> |           |
|             |         environment variables         |           |
|             |         (get data from sensors)       |           |
|   Windows   |                                       |   user    |
|   service   |                                       | interface |
|             |                                       |           |
|             | ------------------------------------> |           |
|             | <------------------------------------ |           |
---------------           udp communication           -------------
                        (send commands to service)          |^  keyboard
                                                            V| and screen
                                                         --------
                                                         | user |
                                                         --------

有什么办法吗?

我们不会使用系统和用户环境变量,因为它写在 Windows 注册表上,也就是说,它会保存到硬盘驱动器,它会变得更慢......

4

1 回答 1

0

正如@HansPassant 所说,我不能直接这样做。虽然我看到了一些通过内存映射文件来做到这一点的方法,但只需通过其他端口添加一个额外的 udp 通信通道就很容易了。所以:

-------------------------          --------------------------------
| the things to measure |          | the things that do something |
-------------------------          --------------------------------
     |                                  ^
     | sensors                          | switches
     V                                  |
-------------------------------------------------------------------
|                     dedicated hardware                          |
-------------------------------------------------------------------
     | ^
     | |  serial communication 
     V |
---------------                                       -------------
|             | ------------------------------------> |           |
|             |           udp communication (port 3)  |           |
|             |         (get data from sensors)       |           |
|   Windows   |                                       |   user    |
|   service   |                                       | interface |
|             |                             (port 1)  |           |
|             | ------------------------------------> |           |
|             | <------------------------------------ |           |
---------------           udp communication (port 2)  -------------
                        (send commands to service)          |^  keyboard
                                                            V| and screen
                                                         --------
                                                         | user |
                                                         --------

如果有人提供更好的解决方案,我将来会将其标记为解决方案。

于 2013-06-03T22:35:07.073 回答