使用远程处理和Windows服务执行C#应用程序

时间:2012-07-05 22:31:32

标签: c# windows-services remoting

我正在尝试使用远程处理和Windows服务启动应用程序(在本例中为记事本)。为了测试,我试图让记事本运行。虽然我似乎建立了连接(在任务管理器的进程下,记事本正在运行),但我没有看到窗口出现。我有一个客户端,用于通过键入文本框并单击按钮发送命令来运行,服务应该能够获取命令。我的代码分为3部分:

MyNewService:

namespace MyNewService
{
    public partial class MyNewService : ServiceBase
    {
        bool serviceOn = false;
        string command = String.Empty;

        HttpChannel ch = new HttpChannel(4002);


        public MyNewService()
        {
            InitializeComponent();

        }

        protected override void OnStart(string[] args)
        {
            ChannelServices.RegisterChannel(ch);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(Service.Test), "ServiceURI", WellKnownObjectMode.Singleton);
        }
    }
}

服务:

namespace Service
{
    public class Test:MarshalByRefObject
    {

        public Test()
        {

        }
        public void runCommand(string command)
        {
            Process myProcess = new Process();
            myProcess.StartInfo.FileName = command;
            myProcess.Start();
        }
    }
}

客户端

namespace Client
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Test t;
        string command;

        private void Form1_Load(object sender, EventArgs e)
        {
            System.Runtime.Remoting.RemotingConfiguration.RegisterWellKnownClientType(typeof(Test), "http://remoteComp:4002/ServiceURI");
            t = new Test();
        }


        private void button3_Click(object sender, EventArgs e)
        {
            command = textBox1.Text;
            t.runCommand(command);
        }
    }
}

我已经编写了一个控制台应用程序来代替Windows服务,以便测试窗口是否显示,窗口确实显示出来。但是使用Windows服务,该过程仅在后台运行。

知道发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

Windows服务不应与用户进行交互。请参阅DanielBrückner对此post的回复。无论如何,丹尼尔提供了两个链接,但文章本身强烈建议避免这些技术。