2012-05-17 15 views
2

我有一個.NET程序集,我建立了訪問我們的數據庫之一,並傳遞給另一位程序員在他們的Delphi應用程序中使用。OLE錯誤8013150A與德爾福使用.NET程序集(作爲管理奇怪運行)

在Vista和Windows 7上,運行Delphi EXE的用戶登錄(沒有Admin權限)運行的機器會因爲「Ole Error 8013150A」而失敗,但是在其他所有我們測試過的操作系統類型上都適用。

當以管理員身份運行時,Delphi EXE工作。

一旦運行EXE ONCE作爲管理員,從那時起它將正常運行時工作正常。

我在想要在需要管理權限的Delphi應用程序中實例化COM接口時需要編寫註冊表中的某些東西,但是一旦寫入就再也不需要重新執行......或者沿着這些行?

錯誤8013150A似乎與安全錯誤有關,從我可以在其上找到的很少的信息來看安全錯誤。

任何想法?

+2

德爾福代碼確實必須做的事情需要提升接入例如註冊表運行它的第一次。可能性幾乎是無止境的。只有你的Delphi開發人員可以將其縮小到他們的代碼中可能導致這種情況的操作。 –

+0

根據他們,錯誤發生在實例化.NET庫並調用它們的INIT方法時。直到現在我一直主要關注COM接口,並沒有想到它會像你提到的那樣簡單...只有在我認爲會導致問題的init中的代碼是一個RegisterWindowMessage調用...但是我必須仔細檢查一切 – Fashtas

+2

這聽起來像你的程序集試圖在註冊表('HKLM'或'HKCR',也許)做一些事情,需要訪問,普通用戶在Vista +中默認沒有。它是否創建了任何註冊表項,或者是在HKLM或HKCR中打開一個擁有多個只讀權限的密鑰?註冊任何COM對象或類? –

回答

1

問題竟然是在.NET程序集下面的代碼

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

只是plonking這個代碼下來基本形式,將導致在Vista和Windows的System.Security.Security例外7機記錄通過用戶帳戶開啓。

它將在管理員工作,並且在用戶安全性創建後,當然也可以工作!具有諷刺意味的是,這個日誌記錄被添加來試圖解決爲什麼我們有其他問題的代碼!

這個錯誤也出現在StackOverflow這裏C#: Simple Windows Service gives Security Exception但當然我最初是追蹤OLE異常!

感謝您的幫助