Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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
启动进程的服务不会显示GUI C#_C#_User Interface_Process_Service - Fatal编程技术网

启动进程的服务不会显示GUI C#

启动进程的服务不会显示GUI C#,c#,user-interface,process,service,C#,User Interface,Process,Service,嘿,我正试图获得一个服务来启动我的程序,但它没有显示GUI。过程开始,但没有显示任何内容。我尝试过启用“允许服务与桌面交互”,但仍然不起作用。 我的程序是一种计算机锁定设备,用于阻止未经授权的用户访问计算机。我使用64位操作系统运行windows 7 以下是我的服务代码: protected override void OnStart(string[] args) { Process p = new Process(); p.StartIn

嘿,我正试图获得一个服务来启动我的程序,但它没有显示GUI。过程开始,但没有显示任何内容。我尝试过启用“允许服务与桌面交互”,但仍然不起作用。 我的程序是一种计算机锁定设备,用于阻止未经授权的用户访问计算机。我使用64位操作系统运行windows 7

以下是我的服务代码:

        protected override void OnStart(string[] args)
    {
        Process p = new Process();
        p.StartInfo.FileName = "notepad.exe";
        p.Start();

        FileStream fs = new FileStream(@"C:\Users\David\Documents\Visual Studio 2010\Projects\LockPCService\LockPCService\bin\Debug\ServiceLog.dj",
        FileMode.OpenOrCreate, FileAccess.Write);
        StreamWriter m_streamWriter = new StreamWriter(fs);
        m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
        m_streamWriter.WriteLine(" LockPCService: Service Started " + DateTime.Now + "\n" + "\n");
        m_streamWriter.Flush();
        m_streamWriter.Close();
    }

    protected override void OnStop()
    {
        FileStream fs = new FileStream(@"C:\Users\David\Documents\Visual Studio 2010\Projects\LockPCService\LockPCService\bin\Debug\ServiceLog.dj",
        FileMode.OpenOrCreate, FileAccess.Write);
        StreamWriter m_streamWriter = new StreamWriter(fs);
        m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
        m_streamWriter.WriteLine(" LockPCService: Service Stopped " + DateTime.Now + "\n"); m_streamWriter.Flush();
        m_streamWriter.Close();
    }
为了尝试让服务正常工作,我正在使用notepad.exe。当我看到进程时,记事本正在运行,但没有GUI。而且每次我运行ServiceLog时,它都会在那里运行

你知道为什么这样不行吗


谢谢。

服务在不同的帐户下运行,所以记事本由另一个用户在另一个桌面上运行,所以您无法看到它。”从Vista开始,不再支持“允许服务与桌面交互”。

解释了
会话0隔离
,其中包括禁止服务在Windows Vista/7中创建UI。在您的服务中启动另一个进程,它在会话0中启动,并且不会显示任何UI。(顺便说一下,UI已经创建,只是会话0从未显示)。on CodeProject可以帮助您从用户桌面上的服务创建流程并显示其UI


也请考虑将流对象打包在一个适当的位置。

< P>服务在不同的登录会话中运行,并且与用户有不同的窗口站。这意味着所有GUI活动都与用户的程序隔离,而不是服务不能显示GUI。实际上,这种设计使得临时阻止用户程序的访问变得更加容易


你需要打电话。

我知道这是一篇迟到的帖子,但我发现这对我很有帮助。我正在运行Windows7,本文提供的解决方案非常有效

如果下载代码,则有一个名为
ApplicationLoader
的类。将该类包括在项目中,然后就这么简单了:

// the name of the application to launch
String applicationName = "cmd.exe";

// launch the application
ApplicationLoader.PROCESS_INFORMATION procInfo;
ApplicationLoader.StartProcessAndBypassUAC(applicationName, out procInfo);

啊,我明白了,我怎样才能用当前用户运行它?即使是在登录用户帐户下运行的服务也会处于不同的登录会话中,并在隔离GUI环境中运行。你需要阅读有关窗口站和桌面的信息。此外,这是正确的,但无助于解决问题,因此它应该是一个注释而不是答案。对于此任务,实际上最好不要使用用户的桌面,因为您正试图阻止对它的访问。它是一个显示并锁定鼠标的表单,因此当用户输入密码时,鼠标将被释放,他们可以再次使用计算机。如果您试图阻止访问,您可能希望在用户桌面上运行您的进程。然后它可以钩住键盘和鼠标来完全屏蔽桌面,或者显示某种屏蔽窗口来覆盖桌面。SwitchDesktop仍然允许有人通过Ctrl+Alt+Del来终止服务。注入的进程可以在Ctrl+Alt+Del之后禁用所有可用的选项(实际上,服务可能也可以这样做)。我已经通过程序禁用了所有这些选项(不正确,但您无法让taskman打开)。他们唯一能做的就是使用当你按下ctrl+alt+del时打开的菜单,因为我不知道如何禁用它。但是无论他们做什么,程序仍然会在那里。你不能禁用Ctrl+Alt+Del,但是你可以禁用或隐藏那里显示的选项。它们是注册表设置。你应该可以很容易地找到它们。如果想彻底的话,可以考虑杀死TaskMun.EXE和其他替代的任务管理器(ProcEx.EXE和ProcExp64.EXE用于进程资源管理器)。我可以说,我为我公司的一款产品做了所有这些,基本上是一个完整的桌面锁,但我当然不能给你任何代码。你知道,当你投否决票时,会弹出一个小框,建议你留下一条评论,解释为什么,这是有原因的。回答者真的很注意理性的反馈。Tnx在windows7中为我工作过,它在windows8中也能工作吗?还没有一台要测试。我也没有一台Windows8机器要测试。据推测,我将在下周开始工作,我们拭目以待。仅供参考,我用Windows 8和10测试了此功能,我可以确认它不会工作。