2011-08-11 62 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?就像您提供更多信息一樣,我們可能會提供全面的解決方法。