Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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#_.net_Winlogon - Fatal编程技术网

C# 如何为我创建服务登录Windows?

C# 如何为我创建服务登录Windows?,c#,.net,winlogon,C#,.net,Winlogon,我有一个基本的设置来处理这里,没有域或花哨的东西。我可以让一个程序从我的手机接收信息来触发事件等 C#应用程序在登录之前如何在后台运行?(我将首先尝试作为一种服务…) 而且,该程序如何触发登录Windows?这将是一个个人应用程序,所以我不太关心安全性 一些伪代码(是的,我知道它不安全): 我已签出Windows的LogOnUser API调用,但这似乎是在后台登录用户…如果该服务始终作为给定用户运行(即,它不必更改用户以响应请求),然后,您只需在服务的“登录”选项卡中设置指定用户的凭据,而不用

我有一个基本的设置来处理这里,没有域或花哨的东西。我可以让一个程序从我的手机接收信息来触发事件等

C#应用程序在登录之前如何在后台运行?(我将首先尝试作为一种服务…)

而且,该程序如何触发登录Windows?这将是一个个人应用程序,所以我不太关心安全性

一些伪代码(是的,我知道它不安全):


我已签出Windows的LogOnUser API调用,但这似乎是在后台登录用户…

如果该服务始终作为给定用户运行(即,它不必更改用户以响应请求),然后,您只需在服务的“登录”选项卡中设置指定用户的凭据,而不用担心以编程方式更改凭据

否则,您需要使用LogonUser API并将令牌从该API传递到新的WindowsIdentity实例,然后对该新标识使用模拟方法。关于所涉及的内容,有一篇很好的文章


还忘了提及:如果您作为服务运行,那么您使用Environment.GetEnvironmentVariable的方法将不会获取服务用户的信息,也不会获取交互用户信息(技术上,根据操作系统的不同,可能会有多个同时交互用户)。

如果服务始终作为给定用户运行(即,它不必更改用户以响应请求),那么您只需在服务的“登录”选项卡中设置指定用户的凭据,而不用担心以编程方式更改凭据

否则,您需要使用LogonUser API并将令牌从该API传递到新的WindowsIdentity实例,然后对该新标识使用模拟方法


还忘了提及:如果您作为服务运行,那么使用Environment.GetEnvironmentVariable的方法将不会获取服务用户的信息,也不会获取交互用户信息(技术上,根据操作系统的不同,可能会有多个同时交互的用户)在过去我看到过的唯一方法是实现类似于VNC的东西,在这里你可以控制一个服务中的鼠标和键盘输入。一个好的起点是检查类似的东西。(警告它是用C++写的,而不是用于心脏的模糊)。
编辑:如果您熟悉非托管代码(C++或类似代码)使用发布的建议之一可以更容易地实现这一点。

我在过去看到的唯一方法是实现类似于VNC的功能,您可以通过服务控制鼠标和键盘输入。一个好的起点是查看或类似的功能。(警告它是用C++写的,不是针对心脏的微弱)。< /P>
编辑:如果您对非托管代码(C++或类似代码)感到满意,那么使用发布的建议之一可以更轻松地实现这一点。

对于一个应用程序来说,这是非常非常非常困难的,有很多很好的安全原因。正如Raymond Chen所说,“想象一下,如果有任何应用程序可以做到这一点”

正确的方法是创建一个GINA替代品(这可能比你想要处理的麻烦多得多)


但再次,停止,思考并考虑简单的声明“我希望一个应用程序能够登录任何人而不需要用户交互”的含义。。这在Windows 9x中是可能的,而且是设计删除的功能。想想看。

对于一个应用程序来说,这是非常非常困难的,有很多很好的安全原因。正如Raymond Chen所说,“想象一下,如果任何应用程序都能做到这一点。”

正确的方法是创建一个GINA替代品(这可能比你想要处理的麻烦多得多)


但再次,停止,思考并考虑简单的声明“我希望一个应用程序能够登录任何人而不需要用户交互”的含义。。这在Windows 9x中是可能的,这是设计删除的功能。想想看。

服务不能这样做。好吧,Windows不允许程序代表用户登录…可能除了生物特征提供商…服务不能这样做。好吧,Windows不允许程序代表用户登录…可能除了生物特征提供商产卵器。。。
LogOnWindows(string WindowsUserName, string WindowsPassword)
{
  if (Environment.GetEnvironmentVariable(USERNAME) == null)
  {
    LogonWindows(WindowsUserName, WindowsPassword);
  }
}