2011-08-11 63 views
3

我有这行代码在我的Delphi应用程序:Windows外壳程序和Citrix

sh := CoShellWindows.Create; 

当通过Citrix会话运行,这引发了一个异常“没有足够的存储是可用于完成此操作。”

有人可以证实我怀疑我无法通过思杰访问此问题吗?如果这有什么区别,我正在以无缝模式运行。也许有什么我需要改变发布的图标,使其工作?

我猜测Citrix没有创建“Shell”。

由于

EDIT

CoShellWindows只是它创建它实现了IShellWindows interface的对象的类。然后使用此接口遍历它的项目以查找Internet Explorer实例(或更具体地说,实现IWebBrowser2接口的项目)。

还有一些使用CoShellWindows的其他用例场景,但最终都用于与IWebBrowser2接口(Internet Explorer 8)进行交互。我的要求是获得这个IWebBrowser2对象。

呼叫,在幕后被调用使用以下参数在Windows API CoCreateInstance的:

  • rclsid = {9BA05972-F6A8-11CF-A442-00A0C90A8F39}(的 IShellWindows CLSID)
  • pUnkOuter = NULL(零)
  • dwClsContext = CLSCTX_ALL(我已经尝试这些 标志的各种组合)
  • RIID = {85CB6900-4D95-11CF-960C-0080C7F4EE85}(IShellWindows的IID)
  • PPV =声明为类型IShellWindows变量

如:CoCreateInstance的(CLASS_ShellWindows,零,CLSCTX_ALL,IID_IShellWindows,SH)

+3

我可能会帮助你,但我对Delphi一无所知 - CoShellWindows.Create应该做什么?请记住,对于已发布的应用程序,不存在shell(即桌面)。 –

+0

我不知道这个CoShell是什么,但我可以确认你可以从你的主应用程序运行外部.bat和.exe程序。我们有一个从Citrix图标运行的Delphi应用程序,它运行的很多报告都是外部.exe程序。 –

回答

4

你的例外 “没有足够的存储是可用于完成此操作。”应该真的读“壳不存在,所以没有实例可以创建”

基本上你是假设在Citrix没有壳创建正确。

你在用什么shell?就像您提供更多信息一样,我们可能会提供全面的解决方法。