c# - 如何在 C# 中编写 Windows 服务来为用户启动应用程序?

标签 c# .net windows-services

是否可以启动一个程序,以便具有 Windows 服务的用户可以使用它?我一直在使用 C# 中的 Process.Start()。我可以获得服务来启动出现在进程下的任务管理器列表中的某种进程。但是,该程序从未出现在屏幕上。默认情况下,它在用户名“SYSTEM”下运行。我已调整服务管理器中的“登录”选项以匹配登录计算机的人,但这也不会导致出现窗口。

我觉得我要么缺少一个简单的设置,要么需要为此采取不同的方向。下面是我用来启动 Firefox 作为测试应用程序的代码。

    private void startRunDap()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = "Firefox";
        startInfo.WindowStyle = ProcessWindowStyle.Normal;
        startInfo.UseShellExecute = true;
        Process.Start(startInfo);

        //Process.Start("Firefox");

    }

最佳答案

在 Vista 和 Win7 上,服务在其自己的 session 中使用私有(private)桌面运行。您将启动 Firefox,但它永远不会显示。帐户名实际上是怎么来的,LocalSystem 是一个高特权帐户,一个巨大的安全漏洞。

您将需要用户 session 中的“代理”来启动该过程。一个不可见的程序,您使用运行键或启动文件夹启动,它通过命名管道或套接字与服务对话。可以启动程序。

关于c# - 如何在 C# 中编写 Windows 服务来为用户启动应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503185/

相关文章:

.NET View 状态解码器

logging - hashcorp consul 的日志文件在哪里?

c# - 如何在 C# 中立即强制显示器进入省电模式?

c# - 使用 Prism 设置数据上下文

c# - 通过 OleDb 使用 Microsoft Access 数据库引擎将 DataTable 插入 Excel

.net - 如何在没有导出属性的情况下在 MEF 中导出类型? (例如以编程方式)

c# - app.config 中的 maxReceivedMessageSize 和 maxBufferSize

c# - 我可以对用 Moles 创建的痣类型设定期望值吗?

c++ - Win32 设备事件 : Not receiving DBT_DEVTYP_VOLUME on DBT_DEVICEARRIVAL event

c# - 使用线程通过 API 为数千用户导入数据