【发布时间】:2012-07-18 19:19:34
【问题描述】:
我目前正在处理一个包含 WCF 服务、Windows 服务和 WPF 应用程序的项目。 Windows 服务与 WCF 进行通信,在某种情况下,必须启动 WPF 应用程序才能让用户接收消息。 (WCF 在远程服务器上,其余的在客户端上)。我在发射时遇到了一些障碍。我让服务将消息写入应用程序日志,以便我可以在此过程中进行一些“调试”。 Windows 服务运行以下代码没有问题。
C# 代码,Windows 服务:
WriteLog.WriteString("PostOffice.MessagesWaiting: Inside, starting up.", EventLogEntryType.Warning);
// Call the WPF Application
var messagingProcess = new Process();
var messageProcessStartInfo = new ProcessStartInfo(@"""C:\GoldenEyeMessages.exe""");
messageProcessStartInfo.CreateNoWindow = false;
messageProcessStartInfo.UseShellExecute = false;
messageProcessStartInfo.FileName = @"""C:\GoldenEyeMessages.exe""";
messageProcessStartInfo.WindowStyle = ProcessWindowStyle.Normal;
messageProcessStartInfo.Verb = "runas";
messageProcessStartInfo.RedirectStandardOutput = true;
messagingProcess.StartInfo = messageProcessStartInfo;
messagingProcess.Start();
StreamReader daStreamReaderMan = messagingProcess.StandardOutput;
string newString = daStreamReaderMan.ReadLine();
WriteLog.WriteString("PostOffice.MessagesWaiting: The Eagle has landed.", EventLogEntryType.Warning);
WPF 应用程序不在当前用户的会话中执行。相反,我会弹出一个窗口来查看消息。这是它的图片:
一旦选择“查看消息”选项,它当然会将我切换到不同的会话,然后运行 WPF 应用程序。
我的问题是,我应该如何让 WPF 应用程序在当前用户的会话或“活动”会话中启动?
【问题讨论】:
-
嗨 - “WCF 服务”、“Windows 服务”和“WPF 应用程序”都是完全不同的东西。更重要的是,它们都是完全不同的种类。是的,他们都可以相互交流:有很多方法可以做到这一点。是的,您可以进行设置,以便“事件”(例如,来自 Windows 服务的消息)可以触发“操作”(甚至可能在用户桌面上启动 .exe)。但不是:Windows 服务和 WPF 服务都存在于与用户桌面完全不同的上下文中。我不认为你能做你想做的事。
-
@paulsm4:默认情况下它们存在于不同的上下文中。确实可以授予 Windows 服务与桌面交互的权限。这样做是不明智的。
-
@AngieLeigh:现在你有 10 个代表点 :-)
标签: c# wpf windows-services