Windows Shell 和 Citrix

3

我在我的Delphi应用程序中有这行代码:

sh := CoShellWindows.Create;

当在 Citrix 会话中运行时,会引发异常“没有足够的存储空间来完成此操作。”
有人可以确认我不能通过 Citrix 访问它吗?如果我以无缝模式运行是否有所不同。也许我需要更改发布的图标上的某些内容才能使其工作?
我猜测在 Citrix 中没有“Shell”可供创建。
谢谢
编辑 CoShellWindows 只是创建一个实现 IShellWindows 接口 的对象的类。然后使用此接口来迭代其项,寻找 Internet Explorer 的实例(或更具体地说,实现 IWebBrowser2 接口的项)。
还有一些其他用例场景使用 CoShellWindows,但最终都用于与 IWebBrowser2 接口(Internet Explorer 8)交互。我的要求是获取此 IWebBrowser2 对象。

在幕后,该调用使用以下参数调用Windows API CoCreateInstance:

  • rclsid = {9BA05972-F6A8-11CF-A442-00A0C90A8F39}(IShellWindows的CLSID)
  • pUnkOuter = null(nil)
  • dwClsContext = CLSCTX_ALL(我尝试了各种组合标志)
  • riid = {85CB6900-4D95-11CF-960C-0080C7F4EE85}(IShellWindows的IID)
  • ppv = 一个声明为IShellWindows类型的变量

例如:CoCreateInstance(CLASS_ShellWindows,nil,CLSCTX_ALL,IID_IShellWindows,sh)


3
我可以帮你,但我对Delphi一无所知 - CoShellWindows.Create应该做什么?请记住,在发布的应用程序中没有shell(即桌面)。 - Helge Klein
我不知道这个CoShell是什么,但我可以确认你可以从你的主应用程序运行外部的.bat和.exe程序。我们有一个Delphi应用程序,它从Citrix图标运行,并且可以运行许多报告,这些报告都是外部的.exe程序。 - Chris Thornton
1个回答

4
您的异常信息“Not enough storage is available to complete this operation.”实际上应该是“Shell不存在,因此无法创建实例”。
基本上,您的假设是正确的,在Citrix中没有要创建的shell。
您需要使用shell的目的是什么?如果提供更多信息,我们可能会能够提供完整的解决方法。

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