2012-05-03 61 views
15

我創建了一個窗口服務並安裝它,我創建了它的部署項目並安裝了它。安裝後,我盯着它。它成功開始。System.Security.SecurityException

第二天我做了一些修改,重建和重新安裝,但現在它不安裝。

然後我認爲它與安裝程序的問題,讓我們創建一個服務的自定義安裝程序,以便我可以隨時更新我的​​代碼。

我創建它就像這個incase如果有人需要這個未來。

public class MyInstaller : Installer 
    { 
     ServiceProcessInstaller spi; 
     ServiceInstaller si; 
     public MyInstaller() 
     {    
      spi = new ServiceProcessInstaller(); 
      spi.Account = ServiceAccount.LocalSystem; 

      si = new ServiceInstaller(); 
      si.StartType = ServiceStartMode.Manual; 
      si.ServiceName = "MyService"; 
      si.DisplayName = "My Service"; 
      si.Description = "service installed from command line"; 

      this.Installers.Add(spi); 
      this.Installers.Add(si); 

     } 
} 

我通過檢查參數args從main方法調用它。

      case "-i": 
          case "-install": 
           ti = new TransactedInstaller(); 
           mi = new MyInstaller(); 
           ti.Installers.Add(mi); 
           string logPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\install.log"; 
           ctx = new InstallContext(logPath, cmdline); 
           ti.Context = ctx; //.Context (ctx); 
           ti.Install(new Hashtable()); 
           break; 

現在,當我試圖安裝。 我收到錯誤System.Security.SecurityException:未找到源,但無法搜索某些或全部事件日誌。無法訪問的日誌:安全。

我谷歌它,並知道服務將嘗試訪問應用程序日誌,同時安裝和寫入日誌那裏。

我不寫任何事件日誌。我有我的log4net記錄。但仍然是它的默認行爲。

如何解決這個問題呢?即使我擁有所有權限,它仍未安裝。

謝謝

回答

56

我發現有時您可能需要「以管理員身份運行」。如果您是從命令提示符進行安裝,則可能需要啓動,將與「以管理員身份運行」一起啓動。

+0

我用cntrl + shift +在運行中輸入。然後,我再次manaully右鍵單擊並作爲管理員運行,它工作的人。感謝我正在做的一個愚蠢的錯誤。 但我想知道如何改善窗口服務的啓動/停止性能。 – sunder

+0

@sunder:開始/停止表現將與你的服務正在做的事情有很大關係。 '開始'應該沒問題,因爲通常你會啓動一個新的線程來完成這項工作。要阻止你,需要一些快速的方法來阻止線程的行爲。所以沒有通用的方法來提高性能。 –

+0

我創建了一個批處理文件(.BAT)來安裝該服務,並且我以管理員身份運行該批處理,但不起作用。然後,我以管理員身份運行命令提示符,並在沒有BAT文件的情況下安裝該服務,只需輸入EXE文件的安裝名稱即可。我不知道爲什麼會發生這種情況,但也許可以幫助其他人。我認爲這可能與這樣一個事實有關,即以管理員身份運行BAT文件不會執行您以admin身份執行的代碼,而只是BAT文件。 –

1

我可能有一個單獨的根本原因的消息,但我通過更改我的服務作爲LocalSystem(這正是我想要的)運行而不是LocalService來修復它。

0

我可以證實,在 「Windows 7 64位」 和 「視窗10」 你必須:

1)運行Visual Studio命令提示符以管理員身份(右鍵點擊。其他..屯作爲管理員)

enter image description here

2)去「obj」文件夾,你有exe文件。 (cd [所有路徑到\ obj]) 3)啓動installutil [myservice.exe]

如果不作爲「管理員」運行,即使在舊的win7上也會失敗。 :(

注:MSDN並解釋:

(在:https://docs.microsoft.com/en-us/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer

「若要安裝Windows服務,您必須對您要安裝它的計算機上的管理憑據。」

:)

相關問題