Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否缺少Windows服务的明显替代方案?_C#_Windows - Fatal编程技术网

C# 我是否缺少Windows服务的明显替代方案?

C# 我是否缺少Windows服务的明显替代方案?,c#,windows,C#,Windows,我正在开发一个小软件,它是为一些特殊的基于Windows的信息亭设备设计的。它使用驱动程序监听某些击键/命令,截获它们并执行某些操作 目前,我的概念证明非常有效。我可以在后台将其作为控制台应用程序运行,也可以将其构建为Windows服务。Windows服务真的很有效,而且运行得很好,但一位同事暗示说,能够根据用户应用程序/窗口的活动状态执行任务是很好的——这是我无法(合法地)从Windows服务执行的,因为它无法枚举用户应用程序 显而易见的解决方案是只在后台运行它——除了这些信息亭使用自定义的W

我正在开发一个小软件,它是为一些特殊的基于Windows的信息亭设备设计的。它使用驱动程序监听某些击键/命令,截获它们并执行某些操作

目前,我的概念证明非常有效。我可以在后台将其作为控制台应用程序运行,也可以将其构建为Windows服务。Windows服务真的很有效,而且运行得很好,但一位同事暗示说,能够根据用户应用程序/窗口的活动状态执行任务是很好的——这是我无法(合法地)从Windows服务执行的,因为它无法枚举用户应用程序

显而易见的解决方案是只在后台运行它——除了这些信息亭使用自定义的Windows shell(使用组策略部署)之外,没有什么戏剧性的事情。因此,正常的explorer运行键不会初始化。我现在不知道如何在这种情况下使我的软件自动运行


或者,如果有人有一个用于枚举活动窗口的变通方法,比如针对windows服务中的特定用户,我会对此感兴趣。注意:我实际上不需要对桌面做任何事情,只需读取数据。

通过将我的应用程序添加到UserInit注册表项,我得到了想要的最终结果:

HKLM\Software\Microsoft\Windows NT\Current Version\Winlogon\

Userinit c:\windows\system32\Userinit.exe,c:\myapp\myapp.exe


这很好用,但看起来确实有点骇人听闻,我喜欢其他选择。

Windows Vista及以上版本根本不允许服务与桌面应用程序交互,这是操作系统安全性新重点的一部分。我为一个应用程序系统开发了一些类似的东西(在精神上),它列举了寻找特定遗留应用程序的windows,然后向它发送一些消息(所有这些都是非常光明正大的,没有其他方法可以自动处理破旧的应用程序)。我只是在人们登录时使用组策略将其作为系统托盘应用程序启动。但是我没有你正在处理的自定义Windows外壳的问题。祝你好运

因此,userinit(
HKLM\Software\Microsoft\windowsnt\Current Version\Winlogon\
)可能不是一个特别糟糕的地方,但应该有一两个替代方法。这实际上有点傻(如果你问我的话),这么多年来Windows中出现了多少自动运行位置

以下内容主要是从中复制的,并进行了一两次更新。我想它在这里可能也很方便,谁知道什么东西会永远活在网络上(或不会)

其他自动运行位置按顺序包括:

启动设备驱动程序

硬件相关

  HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
Windows执行一些内部清理,然后启动Winlogon,启动服务控制管理器,启动服务和驱动程序

服务

SCM将启动启动启动值为2的服务和驱动程序

  HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
RunServicesOnce

  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
  HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
RunServices

HKLM/../RunOnce条目在这些完成启动之前不会运行

  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
  HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
**显示登录提示,用户登录,然后继续自动启动处理。

Notify运行程序以响应事件,包括登录、注销、启动、关闭、启动屏幕保护程序、停止屏幕保护程序。恶意软件通常使用此键启动自身

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
UserInit指定应在用户登录后立即启动的程序,并使用逗号分隔的程序列表。默认的userinit.exe程序将加载您的配置文件。也是恶意软件使用的常用密钥

  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
Shell包含userinit.exe将启动的程序的逗号分隔列表。默认shell为explorer.exe。首先在香港中文大学开展项目,然后在香港法律学院开展项目

  HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
**现在已处理其余的Autostart位置…

RunOnce(HKLM)主要用于安装程序,如果路径前面有感叹号(!),则在第一次运行后由操作系统删除,否则在程序运行前删除。这些程序以未定义的顺序同步启动,因此必须在加载HKLM/../Run、HKCU/../Run、HKCU/../RunOnce和启动文件夹之前全部完成。在安全模式下引导时忽略这些键

  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
运行自动运行标准程序的最常见启动位置,在安全模式下忽略,除非前缀为星号(*)

启动文件夹(所有用户)

Win7及以上版本
%ProgramData%\Microsoft\Windows\Start菜单

Win XP/2K
C:\Documents and Settings\All Users\Start Menu\Programs\Startup

启动文件夹(每个用户)

Win7及以上版本
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Win XP/2K
%USERPROFILE%\Start Menu\Programs\Startup

RunOnce(HKCU)主要用于安装程序,语义与HKLM RunOnce键(如上)相同

资源管理器运行通常用于根据策略配置运行程序

  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
  HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
加载键已弃用,不再常用

  HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\load
AppInit\u dll此注册表值包含加载user32.dll时将加载的dll列表。许多程序加载user32.dll,所以这里列出的任何内容都会加载到所有这些程序中。被恶意软件使用

  HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows
ShellServiceObjectDelayLoad类似于运行键,但指向已注册的CLSID InProcServer值。此键下列出的文件在计算机启动时,即启动过程的早期,由资源管理器自动加载

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad
SharedTaskScheduler此处列出的文件在启动Windows时自动运行

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler
其他可能的autostart位置,具体取决于操作系统:

  • c:\autoe
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad
    
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler