在Windows服务中调用Windows应用程序

时间:2012-04-25 04:38:12

标签: c# c#-4.0 web-applications windows-services

我正在研究与2010年提出的问题类似的内容

How to call Windows application using Windows service in C#?

这个答案可能是我的问题的解决方案

https://stackoverflow.com/a/2309089/1270384

虽然我不知道该怎么做。

想知道是否有人可以举例说明所提到的内容或类似内容,即提到的流程类或仅仅是如何处理所给出的指示的简短示例。

更新

我有一个Web应用程序,它检查我的数据库是否有对特定表的更改。我想在我试图创建的这个Windows服务中调用我的应用程序,我想安排每隔20秒运行一次。

我是Windows服务的新手,所以没有得到解释的内容。

非常感谢任何澄清。

2 个答案:

答案 0 :(得分:1)

在服务控制面板的“登录”选项卡上,选中“允许服务与桌面交互”复选框。然后你可以做这样的事情。

public class WinService : ServiceBase
{
Process p = new Process();

public WinService()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
RunApp();
}

private void RunApp()
{
p.StartInfo.FileName = @"<path to your app>";
p.StartInfo.Arguments = "<your params>";
p.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
p.Start();
}

protected override void OnStop()
{
p.Kill();
}
}

编辑:参数传递:

列出startInfo.Arguments中的所有参数,用空格分隔它们。 数字参数按原样列出,字符串参数列在引号中。

示例:

如果您的应用程序的命令行是:

YourApp.exe param1 "param two" param3

然后你的startInfo.Arguments应该设置为:

startInfo.Arguments = "param1 \"param two\" param3";

答案 1 :(得分:0)

您始终可以将Web应用程序中的逻辑封装在一个单独的类中,您可以在服务中调用该类。

否则,您可以使用WebClient课程来呼叫您的网站。