GVKun编程网logo

从Windows服务启动浏览器(window打开服务的命令)

12

对于从Windows服务启动浏览器感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍window打开服务的命令,并为您提供关于.net4.5正确的Windows服务启动方法、.net–获取Wind

对于从Windows服务启动浏览器感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍window打开服务的命令,并为您提供关于.net 4.5正确的Windows服务启动方法、.net – 获取Windows服务启动类型?、c# – 从.NET Windows服务启动进程、c# – 从Windows服务关闭显示的有用信息。

本文目录一览:

从Windows服务启动浏览器(window打开服务的命令)

从Windows服务启动浏览器(window打开服务的命令)

我对微软的世界有点新鲜。 我已经阅读了这个答案和许多其他的链接,我知道,Vista后,Windows服务不能与桌面交互。

不过,我有一个紧急情况,我必须快速find解决方法。 我需要我的Windows服务以某种方式打开一个URL的浏览器(任何一种丑陋的黑客现在会做)。 答案是:

您需要编写一个单独的代理应用程序,该应用程序将在用户login时自动启动,并与您的服务进行通信。 然后代理可以启动浏览器或做任何你需要的东西。

有人可以向我解释我怎么可以用简单的方法做到这一点? 那个服务怎么会跟这个“代理”对话呢? 这个“代理”究竟是什么?

Windows操作系统体系结构书

dynamic识别控件的容器(GroupBox等)

导入基于64位或32位操作系统的外部DLL

如何通过索引访问数据中继器的项目而不是显式名称?

以编程方式更改播放设备xp

任何链接或build议将不胜感激。

编辑:目前。 我的服务试图运行以下代码: System.Diagnostics.Process.Start("www.google.com");

我后来发现,这是行不通的

有没有办法通过局域网caching和分发Visual Studio更新?

.NET(C#):当你只有一个进程句柄或PID时获取子窗口?

C# – 文件path的正则expression式,例如C: test test.exe

自行终止或卸载Windows服务

一个服务附加到另一个截断文件

恐怕没有“快捷方式”来做到这一点。 (由于服务不能与用户的桌面交互,即使可以启动浏览器,用户也无法看到它。)

你所提到的“代理应用程序”是一个完全独立的应用程序,它在登录时在用户桌面下运行。 它将不得不使用一些进程间通信的方法(命名管道,TCP / IP等)来与服务进行通信。

服务不与桌面交互的原因是出于安全原因。 没有“快速解决方法”可用,不应该有一个。 也没有什么“简单的方法”来规避这种变化(而且,不应该有 – 如果你能以简单的方式绕过安全,那么安全性就不大)。

是的,从一个服务,你可以在桌面上运行代码…问题是在哪个桌面上? 因为可能有多个用户同时登录(例如,在Windows server中可能有多个远程登录的用户)。

如果在你的例子中使用了一个服务的Process.Start :

System.Diagnostics.Process.Start("www.google.com");

该程序不会出现在任何用户的桌面上,因为该服务不与任何用户的桌面相关联。

解决方案是检测哪个用户在本地登录,然后以该用户的身份(以及该用户的权限)执行该程序。 为此,我想链接到我的另一个答案 ,我演示了如何从服务调用程序。 在这个答案中,我提出了这种技术所需的代码

注意 :这个答案是关于屏幕截图的,我所描述的技术仍然是在用户的会话中调用一个程序,而这个方法是从一个服务开始的。 所以这适用于你的问题。

您可以使用此方法直接执行所需的浏览器。 作为替代方案,您可以使用它来调用服务可执行文件,您可以在其中使用System.Environment.UserInteractive检测可执行文件是否不作为服务运行。 如果您将url作为执行参数传递给您的服务可执行文件,那么您可以使用Process.Start与上面的示例一样使用默认浏览器打开它。

注意 :代码在Windows 7上进行了测试。

如果你需要紧急的东西 – 我会尝试从服务中把消息放入MSMQ,然后写一些简单的等待队列消息的客户端,然后继续。

更新:

实际上,如果你需要的东西很快 – 你甚至可以写一些文件,并编写简单的桌面(winforms?)应用程序来读取池中的文件(每5秒?),并在需要时打开浏览器。

使用shellexecute使用pinvoke http://www.pinvoke.net/default.aspx/shell32.shellexecute

C# Signature: public enum ShowCommands : int { SW_HIDE = 0,SW_SHOWnorMAL = 1,SW_norMAL = 1,SW_SHOWMINIMIZED = 2,SW_SHOWMAXIMIZED = 3,SW_MAXIMIZE = 3,SW_SHOWNOACTIVATE = 4,SW_SHOW = 5,SW_MINIMIZE = 6,SW_SHOWMINNOACTIVE = 7,SW_SHOWNA = 8,SW_RESTORE = 9,SW_SHOWDEFAULT = 10,SW_FORCEMINIMIZE = 11,SW_MAX = 11 } [DllImport("shell32.dll")] static extern IntPtr ShellExecute( IntPtr hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,ShowCommands nShowCmd); // Asks default mail client to send an email to the specified address. ShellExecute( IntPtr.Zero,"open","mailto:support@microsoft.com","",ShowCommands.SW_SHOWNOACTIVATE ); // Asks default browser to visit the specified site. ShellExecute( IntPtr.Zero,"http://channel9.msdn.com",ShowCommands.SW_SHOWNOACTIVATE ); // Opens default HTML editing app to allow for edit of specified file ShellExecute( IntPtr.Zero,"edit",@"c:file.html",ShowCommands.SW_SHOWNOACTIVATE ); //Modified by Aljaz: Replaced the last zero in these calls with 4 otherwise it wouldn't show anything // 0 stands for SW_HIDE contant,which means execute but don't show the window which is probably not // what we want.

.net 4.5正确的Windows服务启动方法

.net 4.5正确的Windows服务启动方法

既然任务似乎是实现大多数线程的可接受的方式,那么现在这是编写Windows服务启动方法的“正确”方式吗?

启动方法将很快完成,但我是新来的任务,并希望确保这是实施服务工作的正确方法。

我已经testing了它,它似乎工作,但我想知道是否有这种方法的副作用。

protected override void OnStart(string[] args) { Task.Run(() => MyServiceThingsTodo()); } private void MyServiceThingsTodo() { // all the stuff I want to do like read from database,send alerts // even start other tasks }

我环顾了通常的来源,找不到任何来源(MSDN或其他),具体说明这是正确的方式来build立一个服务。

replace和创buildWindows快捷方式

运行WPF程序时防止Windows工作站(桌面)locking

Control.FindForm和ContainerControl.ParentForm有什么区别?

我是否需要在每台Linux PC上安装单声道才能在Linux平台上运行.NET应用程序?

截取并修改文件系统调用 – Windows

默认的IMarshal实现?

是否有可能通过关联的文件将命令行parameter passing给可执行文件?

无法在新目录上检查“包含可inheritance的权限”

在资源pipe理器中的文件图标上添加状态图标,如DropBox或.NET中的SVN

Windows版本的“Netem”(模拟慢速networking连接)?

我已经在企业应用程序中使用它,它没有问题:

_messageQueueWatcher = new Task(_engineservice.StartMessageQueueWatcher,_cancelTokenSource.Token,TaskCreationoptions.LongRunning); _messageQueueWatcher.Start();

我从一个异步调用OnStart(string [] args){}

.net – 获取Windows服务启动类型?

.net – 获取Windows服务启动类型?

在System.ServiceProcess命名空间中,是否有任何类型的枚举或其他直接成员来确定ServiceController的服务的启动类型(自动,延迟自动,按需,禁用)?

我的想法是使用.NET框架类库的该命名空间(或其他命名空间)的可用成员来确定该事物,而不是查看操作系统注册表或WMI以获取服务的启动类型,因为我可以这样做,我我只是问.NET框架是否公开了一种更简单的方法来确定那件事.

用VB.Net编写的伪代码,但我也可以管理C#方法:

Public Shared Function GetStartType(ByVal svcName As String) As ServiceControllerStatus

    Dim svc As ServiceController = (From service As ServiceController In ServiceController.GetServices()
         Where service.ServiceName.Equals(svcName,StringComparison.OrdinalIgnoreCase)
        ).FirstOrDefault

    If svc Is nothing Then
        Throw New ArgumentException("Any service found with the specified name.","svcName")
    Else
        Using svc
            ' Note that StartTypeEnumValue does not exists.
            Return svc.StartTypeEnumValue
        End Using
    End If

End Function
您可以使用WMI和 ManagementObject来实现此目标,基于 C# – Get Startup Type of a Service (Windows).

像这样的东西(基于链接文章中的代码).最初的例子是在C#中,所以我试图快速转换到VB.NET,但语法可能有点不对.我还将方法返回类型修改为String,因为我一旦得到它就不确定你想要对该值做什么.

不要忘记添加Imports System.Management.

Public Shared Function GetStartType(ByVal svcName As String) As String

    Dim startMode As String = String.Empty
    Dim filter As String = String.Format("SELECT StartMode FROM Win32_Service WHERE Name = '{0}'",svcName)
    Dim svc As ManagementObjectSearcher = New ManagementObjectSearcher(filter)

    If svc Is nothing Then
        Throw New ArgumentException("Any service found with the specified name.",paramName:="svcName")
    Else
        Try
            Dim services As ManagementObjectCollection = svc.Get()

            For Each service As ManagementObject In services
                startMode = service.GetPropertyValue("StartMode").ToString()
            Next
        Catch ex As Exception
            ' Do something if needed
        End Try
    End If

    Return StartMode
End Function

c# – 从.NET Windows服务启动进程

c# – 从.NET Windows服务启动进程

我正在尝试从.NET Windows服务启动控制台应用程序.该服务在Windows 2008服务器上运行.

我使用Process.Start运行控制台应用程序并运行(我可以在任务mgr中看到它),但我从来没有得到进程ID,并且对Process.Start的调用只是挂起.
如果我从我的Windows 7机器运行相同的服务,该过程运行,我得到过程ID回来没问题.

我很迷惑 ..

解决方法

我有同样的问题.对我来说,关键是设置StartInfo.UseShellExecute = false;

c# – 从Windows服务关闭显示

c# – 从Windows服务关闭显示

我写了一个 Windows服务,当某些条件发生时,它应该关闭显示器.我使用的代码是:

private const int MONITOR_OFF = 2;
SendMessage(GetDesktopWindow().ToInt32(),WM_SYSCOMMAND,SC_MONITORPOWER,MONITOR_OFF);

此相同的代码适用于Windows应用程序,但从Windows服务执行时,没有任何反应.也没有例外,Marshal.GetLastWin32Error()也返回0.

关于我可能遗失的任何想法?

解决方法

由于服务没有对​​桌面的默认访问权限,因此您对GetDesktopWindow()的调用返回的内容不是您期望的;然后你盲目地将它转换为Int32并将其用作SendMessage()的窗口句柄目标.由于收件人可能不是有效窗口,因此它不会执行任何操作.

关于从Windows服务启动浏览器window打开服务的命令的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.net 4.5正确的Windows服务启动方法、.net – 获取Windows服务启动类型?、c# – 从.NET Windows服务启动进程、c# – 从Windows服务关闭显示等相关知识的信息别忘了在本站进行查找喔。

本文标签: