我有一个需要整合(32位)TWAIN扫描程序支持的64位桌面应用程序,因此我通过编写32位自托管WCF服务来接近它。使用虚拟应用程序,我的基本方法有效,但我遇到了一些困难。 32位扫描仪" app"不能在我的通话应用程序之外使用,所以当用户点击"扫描"我的应用程序中的按钮,我使用Process.Start()来启动自托管扫描程序应用程序。那部分工作正常。
我目前已将自托管扫描仪应用程序设置为控制台应用程序。我启动它,然后在WCF服务上调用定义为Scan()的方法。 Scan()方法显示模式对话框,允许用户执行扫描。这也很好。
我有两个问题。
1)还会显示空控制台窗口以及扫描对话框。我不想看到控制台窗口,所以我尝试调用Process.Start并指定ProcessWindowStyle.Hidden。这隐藏了控制台窗口,但也有不允许扫描对话框显示的不良影响。我可能需要更改为基于WinForms的自托管扫描程序应用程序,但后来我必须弄清楚如何对其进行模态处理(换句话说,我希望将控件设置为扫描仪应用程序直到用户单击取消,或扫描扫描仪应用程序中的图像)。有关最佳方法的任何建议吗?
2)一旦我成功扫描,我想"关闭"扫描仪自托管应用程序。到目前为止,我成功完成此操作的唯一方法是从我的调用应用程序调用Process.Kill()。我不喜欢那种做法。我尝试在WCF服务中实现一个CloseHost()方法,并在调用该方法时终止主机应用程序,但后来因为连接意外终止而出现WCF错误。我也可以使用有关这方面的好方法的建议。
提前谢谢!
答案 0 :(得分:0)
我意识到在WCF主机中实现扫描仪UI对我来说很愚蠢。我将在我的客户端应用程序中拥有整个UI,然后将逻辑部分放入(非可视)WCF库中。
我向另一个方向前进的唯一原因是因为我已经从我下载的示例项目中获得了一个对话框,我认为从WCF服务中显示它会很简单。