.net 确保GUI应用程序在XP后运行而不考虑用户登录的方法

.net 确保GUI应用程序在XP后运行而不考虑用户登录的方法,.net,windows,legacy-code,.net,Windows,Legacy Code,我真的很难为这个问题找到一个合适的标题,如果你能在阅读后想出更好的标题,请随意更改 我有一些在XP上运行的遗留代码,我最近在网上阅读一些其他资料时才意识到,如果我们决定升级它运行的计算机,它将不起作用。实际上,这也解释了我在Win7机器上测试它时遇到的许多问题,哈哈。它的设置如下: 我们有一个Windows服务,其唯一目的是启动一些其他程序。它确保主程序始终运行,并且当用户登录时,它启动一个访问程序,强制用户输入安全密钥。主程序是一个GUI应用程序,主要用于读取串行数据,将其发送到我们的服务器,

我真的很难为这个问题找到一个合适的标题,如果你能在阅读后想出更好的标题,请随意更改

我有一些在XP上运行的遗留代码,我最近在网上阅读一些其他资料时才意识到,如果我们决定升级它运行的计算机,它将不起作用。实际上,这也解释了我在Win7机器上测试它时遇到的许多问题,哈哈。它的设置如下:

我们有一个Windows服务,其唯一目的是启动一些其他程序。它确保主程序始终运行,并且当用户登录时,它启动一个访问程序,强制用户输入安全密钥。主程序是一个GUI应用程序,主要用于读取串行数据,将其发送到我们的服务器,并允许用户控制发送的数据类型和监控错误。access程序显然也是一个GUI。还有另一个Windows服务确保access程序正在运行,如果有人杀死它,它会将其注销。不知道为什么它不包括在第一次服务中,但这是另一个问题

因此,我现在的问题是,从Windows服务启动这些GUI进程在XP中运行良好,因为所有操作都在同一个会话中运行。在以后的操作系统中,这不起作用,因为所有服务都在单独的会话中运行,并且当服务启动进程时,您无法看到GUI,因为它们在与用户不同的会话中运行

我想更新这些应用程序以与更新的操作系统一起工作,但我不确定最好的方法是什么。以下是我的一些想法:

将用于读取和发布数据的所有代码移动到服务本身中。这样,无论登录的用户如何,它都会一直在做重要的事情,当有人登录时,只要让服务在用户会话上启动GUI就可以了,但这似乎是可能的。。。然后服务就可以使用命名管道与GUI通信了?WCF?另外不确定是否显示需要显示的内容/接受用户的命令。 尝试让GUI在登录时在用户会话中启动,并在服务会话中终止。然后,当用户注销时,在服务会话中重新启动它,使其几乎一直运行。
我更喜欢第一种选择,但不确定这是否是正确的方法。实施这些变化的标准方式是什么?还有什么与我的想法完全不同的想法可能更好吗?

我不太清楚你在问什么

听起来好像你有XP机器,上面有某种物理设备。机器从该设备读取数据,可能根据用户输入修改该数据,然后将其传递给服务器

业务要求用户使用某种形式的附加安全代码登录到应用程序,如果用户应用程序退出,则应将用户从计算机上注销

如果这是一个正确的摘要,请相应地编辑您的问题&我将更新此摘要

您的第一个挑战将是找到一种现代硬件与物理设备通信的方法。我认为串行端口到USB转换器是存在的,但是自从计算机上有串行端口以来已经有一段时间了

可以强制程序始终在登录-搜索信息亭模式下运行和/或与您最喜欢的桌面支持人员交流想法

您可能已经这样做了,但只是以防万一-与业务部门一起验证需求。对于较旧的应用程序,某些功能可能不再使用/不再需要。例如,如果用户共享一个公共安全代码,那么您可以从应用程序中完全删除该功能

你可能想考虑一个Windows服务将原始数据直接转储到服务器,然后编写一个Web应用程序来处理用户交互。根据您的需要,原始数据可能首先进入临时表。Web应用程序已经有了处理安全性等问题的方法,并且更易于更新和调试


你有很多选择,但我们必须把重点放在解决这个问题上

我不认为把所有东西都转移到服务上有多大意义。。。但一切都是值得探索的,只有你知道代码以及这一切有多困难

诚然,我的第一个想法是。。如果让windows服务为需要运行的每个程序创建一个自定义事件日志会怎么样。然后在任务计划程序中设置所有其他程序。让每个程序从不同的事件日志中触发。例如,您的服务可以触发登录事件日志并对其进行适当命名。在任务计划程序中,您可以设置登录UI的.exe,以便在此事件后触发。然后,当用户通过身份验证时 n它将触发另一个事件日志,该日志名为主UI行中的某个事件,该事件日志将触发主UI。您可以在设置中设置每个程序执行用户,以便您能够看到它。你可以在大约2小时或更短的时间内完成设置……但是我越想它,它就越不起作用,因为有多个用户

…我知道必须有一个更简单的解决方案,所以我在谷歌上搜索:

还应注意以下相关信息:

伯劳克回答的问题是,它不适合用户 通过RDP连接。这是我的解决方案,它正确地确定了 创建进程之前当前用户的会话。它已经过测试 使用XP和7

您需要的所有内容都打包到一个带有 静态方法:公共静态bool LaunchUserProcessstring appPath, 字符串cmdLine、字符串workDir、bool可见


@JeffO是的,我真的不知道该把它放在哪里,因为我没有发布任何代码,更多的是问一个概念性的问题。我在想,这可能不适合任何网站,我只需要在这一点上做更多的研究>。哈,是的,我在前面发现了这一点,它非常适合从Session0启动GUI我想我的问题的根源在于,我想不出一种方法可以让数据读取和发布代码一直运行,但仍然允许用户在实际登录时查看GUI并控制它。我只需要图形用户界面,如果有一种方法可以在有人注销时保持它,这将大大简化事情,因为我可以让一切基本保持原样,但其他事情必须一直发生。我的问题是两者之间的通信。我真的不明白程序是如何工作的。这是一个在目录中查找的程序吗?如果是,它基本上是读取文件创建时的目录。在这种情况下……取决于外部约束。。我的建议是运行服务中的所有自动化流程,但让它检查一个fileXML?或者基于数据库/xml文件中的某种标志传递文件类型/数据的数据库。然后在UI中让用户控制标志。