被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触发器触发时(包括一条消息到达消息时调用独立可执行文件的规则),它将捕获一个异常(即创建文件)。
答案 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消息。当它收到一个时,会显示一个窗口。