Приложение VB6 не выполняется как запланированная задача, если пользователь не вошел в систему - PullRequest
2 голосов
/ 09 апреля 2010

Я был бы очень признателен за помощь в этом! Это может быть сложно. :)

Проблема

  • У меня есть приложение VB6, которое настроено как запланированное задание. Он запускается каждый раз, но при выполнении CreateObject() происходит сбой, если пользователь не вошел в систему на компьютере.
  • Я ищу информацию о том, что может вызвать это. Мое основное подозрение - сбой в работе некоторых API Windows.

Ключевые моменты

  • Поведение подтверждено в Windows 2000, 2003, 2008 и Vista.
  • Приложение выполняется от имени пользователя X в назначенное время, выполняемое планировщиком задач Windows.
  • Он выполняется каждый раз. Приложение запускается!
    • Если пользователь X вошел в систему через RDP, он работает отлично. (Обратите внимание, что пользователь не должен быть подключен, только вошел в систему)
    • Если пользователь X не вошел в систему на компьютере, произойдет сбой приложения.

Точка отказа

  • Сбой приложения при использовании CreateObject() для создания экземпляра объекта DCOM, который также является частью приложения.
  • Объекты DCOM объявляют .dll-ссылки при запуске (глобально / поверх .bas-файла) и запускают небольшую функцию запуска. Ошибка должна быть во время запуска, возможно, в одном из .dll-объявлений.

Мысли

После некоторого поиска в Google мое первоначальное подозрение было направлено на MAPI. Из того, что я мог видеть, MAPI требует, чтобы пользователь вошел в систему. Приложение имеет ссылки MAPI. Но даже со всеми удаленными ссылками MAPI он все равно не работает.

Какая разница, если пользователь вошел в систему? Отображение реестра? Среда? Explorer.exe запущен.

Не входит ли пользователь в систему, когда приложение выполняется как пользователь?

Какая информация поможет?

  • Окончательный ответ был бы действительно великим.
  • Любая информация о любой функции VB6 / Windows API, которая может действовать по-разному, в зависимости от того, вошел ли пользователь в систему или нет, определенно помогла бы.
  • Подобные переживания могут привести меня в правильном направлении.
  • Советы по отладке.

Ответы [ 4 ]

1 голос
/ 09 апреля 2010

Что такое настройка «Идентичность» компонента DCOM.

C: \ WINDOWS \ system32 \ Com \ comexp.msc

  1. C: \ WINDOWS \ system32 \ Com \ comexp.msc
  2. Услуги по компонентам
  3. Мой компьютер
  4. DCOM Config
  5. Объект DCOM , свойства правой кнопки мыши
  6. Идентичность вкладка

Установите для него значение «Этот пользователь» и задайте пользователя с необходимыми разрешениями, а затем запустите приложение самостоятельно, чтобы увидеть, может ли компонент DCOM все еще работать, затем повторите попытку из планировщика.

1 голос
/ 09 апреля 2010

VB-приложению, возможно, необходимо удерживать запущенные службы, которые работают только тогда, когда пользователь вошел в систему.

0 голосов
/ 14 апреля 2011

есть ваши формы VB6?
потому что, когда вы запускаете по расписанию, он запускается «как служба», поэтому у него не может быть форм или если у него есть среда форм, где их показывать.

Я не помню, что я использовал, но существует универсальный конвертер exe "run as a service" для запуска оконных проектов VB6.

Также, возможно, вы можете легко преобразовать свой код в VBScript и запланировать его.

0 голосов
/ 29 декабря 2010

Мы так и не узнали, что вызвало это.

Вместо этого я создал RDP-клиент, который я поместил в запланированные задачи. Он вошел в систему пользователя, который имел необходимое приложение при запуске. Через некоторое время RDP-клиент принудительно отключил пользователя (чтобы не допустить зависания запущенных приложений).

Не идеальное решение, но, тем не менее, решение.

...