2010-07-04 29 views
0

advice of Henk後,我在VS10中創建了一個安裝項目,目的是添加一個自定義操作。這個自定義操作將有希望添加EventLog,同時以管理員身份運行(即在安裝期間),而不是讓我的應用程序在使用UAC的操作系統上引發異常。此代碼在安裝時是否會創建EventLog?

不幸的是,我通常不能訪問使用UAC的操作系統。我下一次做,我希望安裝順利。

考慮到這一點,下面的代碼中有什麼顯然是錯的?

using System; 
using System.Diagnostics; 

namespace EventLogCreator 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      switch (args[0]) 
      { 
       case "-i": 
        if (!EventLog.Exists("SSD Log")) 
        { 
         Console.WriteLine("Log not found, creating."); 
         EventLog.CreateEventSource("setup", "SSD Log"); 
        } 
        break; 
       case "-u": 
        if (EventLog.Exists("SSD Log")) 
        { 
         Console.WriteLine("Log found, removing."); 
         EventLog.Delete("SSD Log"); 
        } 
        break; 
      } 

     } 
    } 
} 

該項目的輸出被吸入安裝項目中。然後,我有兩個自定義操作:

  1. 上安裝帶有「-i」作爲參數
  2. 在卸載與「-u」作爲參數

我不期待一個免費的代碼審查,但我在這裏冒險未知,所以我會很高興,如果我哼了一堆垃圾。

PS我特別擔心的是我指定的實際日誌名稱,但不是實際的來源。這很重要嗎?

回答

1

使用「System.Diagnostics」程序集中的「EventLogInstaller」可能會更好。

當您創建自定義組件,然後將事件日誌組件添加到設計圖面,填寫組件的屬性,然後單擊屬性中的「添加安裝程序」鏈接/命令窗口。這將添加一個項目安裝程序組件,其中將包含一個事件日誌安裝程序組件。

事件日誌安裝程序組件是您正在查找的內容,基本上它是一個Windows安裝程序操作,可以在您創建Windows安裝程序包(MSI)時運行。您只需在Visual Studio部署項目的「自定義動作編輯器」中指定安裝程序操作即可。關於MSDN庫中的自定義操作,有相當多的信息。

也有看看下面:

EventLogInstaller Class

安裝程序工具(Installutil.exe) - msdn.microsoft.com/en-us/library/50614e95(VS.80).aspx

+1

爲了澄清,EventLogInstaller位於System.Diagnostics名稱空間中。 – Llyle 2011-02-21 02:13:35

+0

謝謝vanslly,修復了這個錯誤。 – Schalk 2011-03-04 13:37:04

1

我現在不記得或訪問的細節,但在設置項目的那個(可怕的)用戶界面中的一些應該有'標準'行動的alist,其中包括創建一個EventLog。這將是最安全的方式。

但你應該沒問題測試這個沒有UAC。如果它起作用,它就會起作用。 setup.exe以管理員身份運行

相關問題