Ошибка OLE 8013150A с Delphi с использованием сборки .NET (странность запуска от имени администратора)

У меня есть сборка .NET, которую я построил для доступа к одной из наших баз данных и передал другому программисту для использования в своем приложении Delphi.

На компьютерах с Vista и Windows 7, работающих под учетной записью пользователя (без прав администратора), запуск Delphi EXE завершается с ошибкой «Ole Error 8013150A», но в остальном работает на всех других типах ОС, которые мы тестировали.

Delphi EXE работает при запуске от имени администратора.

После того, как EXE будет запущен ОДИН РАЗ от имени администратора, с этого момента он будет работать нормально при нормальной работе.

Я думаю, что в реестре есть что-то, что нужно записать при создании экземпляра COM-интерфейса в приложении Delphi, для чего требуются права администратора, но после написания никогда не нужно делать снова ... или что-то в этом роде?

Ошибка 8013150A, похоже, связана с ошибками безопасности, судя по той небольшой информации, которую я смог найти по ней.

Любые идеи?


person Fashtas    schedule 17.05.2012    source источник
comment
Код Delphi действительно должен делать что-то при первом запуске, что требует повышенного доступа, например, к реестру. Возможности практически безграничны. Только ваши разработчики Delphi могут сузить круг вопросов до того, какое действие в их коде может вызвать это.   -  person Marjan Venema    schedule 17.05.2012
comment
По их словам, ошибка возникает, когда они создают экземпляр библиотеки .NET и вызывают метод INIT. До сих пор меня больше всего беспокоил COM-интерфейс, и я не думал, что это что-то столь же простое, как то, что вы упомянули ... Только код в инициализации, который, как мне кажется, может вызвать проблемы, был вызовом RegisterWindowMessage ... но я Придется все перепроверить   -  person Fashtas    schedule 17.05.2012
comment
Похоже, ваша сборка пытается сделать что-то в реестре (HKLM или HKCR, возможно), для чего требуется доступ, которого обычный пользователь не имеет по умолчанию в Vista +. Создает ли он какие-либо записи в реестре или, возможно, открывает ключ в HKLM или HKCR с более чем правами только для чтения? Регистрируете какие-либо COM-объекты или классы?   -  person Ken White    schedule 18.05.2012


Ответы (1)


Проблема оказалась в следующем коде сборки .NET.

string cs = "ANameDoesntExist";
EventLog elog = new EventLog();
if (!EventLog.SourceExists(cs))
{
    EventLog.CreateEventSource(cs, "Application");
}
elog.Source = cs;
elog.EnableRaisingEvents = true;

Простое размещение этого кода в базовой форме вызовет исключение System.Security.Security на компьютерах с Vista и Windows 7, которые вошли в систему через учетную запись пользователя.

Он будет работать в админке, и, конечно же, после этого будет работать в безопасности пользователей, так как он был создан!

По иронии судьбы, это ведение журнала было добавлено, чтобы попытаться выяснить, почему у нас были другие проблемы с кодом!

Ошибка также появилась в StackOverflow здесь, C #: Простая служба Windows дает исключение безопасности но, конечно, я изначально отслеживал исключение OLE!

Спасибо за помощь

person Fashtas    schedule 18.05.2012