Windows Shell и Citrix - PullRequest
       15

Windows Shell и Citrix

3 голосов
/ 11 августа 2011

У меня есть эта строка кода в моем приложении Delphi:

sh := CoShellWindows.Create;

При запуске через сеанс Citrix возникает исключение «Недостаточно памяти для выполнения этой операции».

Может ли кто-нибудь подтвердить мое подозрение, что я не могу получить к нему доступ через Citrix? Я бегу в бесшовном режиме, если это имеет значение. Может быть, мне нужно что-то изменить на опубликованном значке, чтобы он работал?

Я предполагаю, что в Citrix нет "Оболочки" для создания.

Спасибо

EDIT

CoShellWindows - это просто класс, который создает объект, реализующий интерфейс IShellWindows . Затем этот интерфейс используется для итерации его элементов в поисках экземпляра Internet Explorer (или, точнее, элемента, который реализует интерфейс IWebBrowser2).

Существует несколько других сценариев использования с использованием CoShellWindows, но в конечном итоге все они используются для взаимодействия с интерфейсом IWebBrowser2 (Internet Explorer 8). Мое требование - получить этот объект IWebBrowser2.

Вызов за кулисами вызывает Windows API CoCreateInstance со следующими параметрами:

  • rclsid = {9BA05972-F6A8-11CF-A442-00A0C90A8F39} (CLSID из IShellWindows)
  • pUnkOuter = null (nil)
  • dwClsContext = CLSCTX_ALL (я пробовал различные комбинации этих флаги)
  • riid = {85CB6900-4D95-11CF-960C-0080C7F4EE85} (IID IShellWindows)
  • ppv = переменная, объявленная как тип IShellWindows

Например: CoCreateInstance (CLASS_ShellWindows, nil, CLSCTX_ALL, IID_IShellWindows, sh)

1 Ответ

4 голосов
/ 11 августа 2011

Исключение "Недостаточно памяти для выполнения этой операции."должно действительно читаться "Оболочка не существует, поэтому невозможно создать экземпляр"

По сути, вы правы, полагая, что в Citrix нет оболочки для создания.

Что вы используете оболочкуза?как если бы вы предоставили больше информации, мы вполне могли бы предложить полную работу.

...