有没有一种方法可以使用msmq触发器执行我的wpf应用程序?

时间:2019-04-10 12:37:20

标签: c# wpf msmq

被MSMQ触发器调用时,我的可执行文件(C#WPF解决方案)无法正常运行。

我正在将通知消息发送到队列(名为sometestname): 我有一个名为MyNotification的类,其中包含此静态方法:

   public class MyNotification {
    public static void SendNotification(String destination,String msg){
    string s = @".\Private$\sometestname" + "-" + destination;
    if(!MessageQueue.Exists(s))
    MessageQueue.Create(s,false);
    MessageQueue q = new MessageQueue(s);
    Message msg = new Message();
    msg.Body = msg;
    q.Send(message);}
    }

使用此类的WPF解决方案:

void ButtonBase_OnClick(object sender,RoutedEventArgs s){ MyNotification.SendNotification("user1","testing message");}

将从触发器(收到消息时)触发的.exe:

  Public MainWindow(){
     String queueName = @".\Private\sometestname-user1";
    MessageQueue msgq = new MessageQueue(queueName,false);
    try{
    msgq.Purge();
    }
    catch(MessageQueueException e){
    string filename = @"C:\Users\user1\Desktop\error.txt";
    File.Create(filename);
    }
}

请注意:消息正在到达队列,并且可执行文件显示为在后台运行,但是它捕获了错误。 手动执行可执行文件时,它会以无错误方式执行(即未创建任何文件)。 但是,当它从MSMQ触发器触发时(包括一条消息到达消息时调用独立可执行文件的规则),它将捕获一个异常(即创建文件)。

1 个答案:

答案 0 :(得分:1)

我认为您可以创建一个运行exe的Windows服务。 该服务将侦听msmq来显示一条消息,而不是使用MSMQ触发器。

Windows服务仍然不能只运行桌面应用程序。至少不是直接的方式。

它可以使用此处说明的方法:

https://www.codeproject.com/Articles/35773/Subverting-Vista-UAC-in-Both-and-bit-Archite

有人在此线程中发表评论说有人说他们可以在Win10上工作。

How can I run an EXE program from a Windows Service using C#?

话虽如此

您将需要编写,安装和运行该Windows服务。

也许更简单的方法是最小化启动wpf应用程序,并在用户登录时隐藏其任务栏图标。然后,侦听msmq消息。当它收到一个时,会显示一个窗口。