如何在Web应用程序和Windows窗体应用程序之间进行交互

5
我有一个问题,一个Web应用程序需要(在用户通过Javascript交互后)
   1)打开Windows Forms应用程序
   2)向应用程序发送参数(例如ID)

相应地,Windows Forms应用程序应该能够
   1)将参数发送回Web应用程序(更新URL可以)
   2)在新浏览器中打开Web应用程序,如果不存在
如果打开了许多浏览器窗口,则重要的是更新正确的窗口。

Windows Forms应用程序在ASP.NET中
浏览器为IE6+
这些应用程序受特定组织的控制和内部使用,因此不涉及启动自定义应用程序的问题。

问题A)这可能吗?
问题B)如何从Web应用程序向打开的Windows Forms应用程序发送参数?
问题C)如果更新Web应用程序,如何确保目标是正确的浏览器?

8个回答

6
你所要求的是可能的,但似乎有些棘手。
由于安全考虑,试图从网页调用应用程序是不可行的。但你可以制作一个桌面应用程序,将其与一种特定类型的文件关联,并在网页上使用content-type确保当打开具有该类型的URL时调用你的应用程序。这类似于MS Office处理.doc或.xls文档或媒体播放器打开.mp3或.wmv文件的方式。
第二部分(从你的应用程序中打开特定的网页)则更容易。由于你应该知道你的网页地址,因此可以创建带有所需参数的URL字符串并在默认浏览器中打开它(有很多如何做到这一点的示例,下面是一个样例)。
System.Diagnostics.Process.Start("http://example.com?key=value");

如果您想更新已经打开的浏览器页面,或者使用您选择的浏览器(例如始终使用IE6而不是Opera或Chrome),那么您需要做一些功课,但这仍然相当容易。

1
从浏览器打开客户端应用程序应该是容易的部分,但在它打开后与之通信却让我困惑。此外,从客户端应用程序打开浏览器是一件轻而易举的事情,但如果它已经打开了——如何定位正确的浏览器以进行更新呢? - Bruce

2

PokeIn 库能够实现桌面应用程序与网络应用程序的实时连接/每个用户。此外,由于其反向ajax状态管理功能,您可以将这两个应用程序视为一个整体。


1

是的,这个方向有点对。我会研究一下!谢谢。 - Bruce

1

看一下“已注册协议”(例如这里这里)。我知道Skype会这样做,以便从网页拨出电话。但是可能需要在Windows应用程序中进行一些更改,以拦截来自URL的参数。
我还没有尝试过这个,但应该是可行的。


0

不,我认为这是不可能的。
想想病毒/木马/间谍软件。如果仅凭HTML页面就能启动应用程序,那么安装恶意软件将非常容易。
浏览器被设计成防止您这样做。


抱歉,我会澄清问题。这全都是在一个安全的企业环境中进行的。客户端应用程序今天已经发布了,所以问题不在于此——而是交互过程导致了问题。 - Bruce
然后将浏览器嵌入Winforms应用程序中。 - Sklivvz
是的,这个想法确实出现过,但我们不允许在Winform应用程序上进行如此重大的修改。不过还是谢谢! - Bruce

0
你可以使用 ClickOnce 部署和启动表单应用程序 - 这应该会处理将参数发送到应用程序的问题。

据我所知,这只有在应用程序启动时有帮助,而一旦应用程序运行起来就不能与它通信了? - Bruce

0

虽然这可能不完全适合您的应用程序,但考虑使用 Web 服务和表单如何?

此外,您可以传递参数以确保 IE6 而非 Firefox 打开。

System.Diagnostics.Process.Start("c:\ie6\ie6.exe http://www.example.com/mypage");

0

好的,我实际上找到了一个线索,涉及到Web -> Winform部分。

以下代码是从一个Web应用程序中传递参数到Winform应用程序的。我认为这个解决方案有一些安全因素在起作用(比如允许在网页中运行VBScript(和ActiveX?)。对我来说没问题。

代码:

<script type="text/vbscript" language="vbscript">
<!--
Function OpenWinformApp(chSocialSecurityNumber)
Dim oWinformAppWebStart
Set oWinformAppWebStart = CreateObject("WinformAppWebStart.CWinformAppWebStart")
oWinformAppWebStart.OpenPersonForm CStr(chSocialSecurityNumber)
End Function
-->
</script>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接