服務安裝正確,但嘗試通過net start
或從服務窗口啓動服務時,服務無法啓動,甚至無法訪問OnStart
處理程序。除非使用管理員帳戶,否則Windows服務不會啓動OnStart
如果我使用管理員帳戶,服務啓動並正常工作。這似乎表明服務中的某些內容需要管理員權限,但這純粹是一種隨需應變式服務,在請求之前不會執行任何操作。對於這種類型的服務,我認爲至少應該啓動,然後在發出請求需要管理員權限的請求時失敗。
調試是不可能的,因爲我甚至無法啓動它,除了信息日誌指出服務已停止外,沒有任何事件顯示在事件日誌中。有太多的代碼在服務這裏要補充這一切,但入口點是一個相當標準的統一式服務:
partial class MyServiceHost : UnityServiceBase
{
private Bootstrapper _bootstrapper;
public MyServiceHost()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
TextWriter tw = new StreamWriter("ServiceTestLog.txt");
tw.Write("Date: " + DateTime.Now + "\n");
try
{
base.OnStart(args);
_bootstrapper = new Bootstrapper(UnityContainer);
_bootstrapper.Run();
}
catch (Exception ex)
{
tw.Write(ex.ToString());
}
tw.Close();
}
protected override void OnStop()
{
_bootstrapper.Teardown();
base.OnStop();
}
}
出於商業考慮,我不能只讓用戶帳戶它使用的是管理員,所以我」 d感謝有關如何解決此問題的任何建議。
請參閱Steve Townsend的答案,但爲什麼它需要成爲一項服務?它做了什麼,它不能像正常的分離過程那樣運行? –
@CareyGregory這只是我們代碼庫整個服務導向架構的一小部分。沒有包括爲什麼它必須是服務的所有細節,我只是說我在這件事上沒有選擇! – peacemaker
運行sysinternals processmonitor(https://technet.microsoft.com/en-us/sysinternals/bb896645)並查看失敗情況。它可能會在所需的依賴項上獲得「拒絕訪問」。 –