这段代码会在安装时创建一个EventLog吗?

时间:2010-07-04 23:04:29

标签: c# visual-studio-2010 installation event-log custom-action

advice of Henk之后,我在VS10中创建了一个安装项目,目的是添加自定义操作。这个自定义操作有希望在以管理员身份运行时(即在安装期间)添加EventLog,而不是让我的应用程序在使用UAC的操作系统上抛出异常。

不幸的是,我通常无法访问使用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”作为参数卸载
  3. 我不期待免费的代码审查,但是我在这里冒险进入未知领域,所以如果我抓错了垃圾,我会很感激。

    PS我特别担心我正在指定实际的日志名称,但不是实际的来源。这有关系吗?

2 个答案:

答案 0 :(得分:2)

使用“System.Diagnostics”程序集中的“EventLogInstaller”可能会更好。

您可以在创建自定义组件时看到此实现,然后将事件日志组件添加到设计图面,填写组件的属性,然后在属性窗口中单击“添加安装程序”链接/命令。这将添加一个项目安装程序组件,该组件将包含一个事件日志安装程序组件。

事件日志安装程序组件是您正在寻找的,基本上它是一个Windows安装程序操作,可以在您创建Windows安装程序包(MSI)时运行。您所要做的就是在Visual Studio部署项目的“自定义操作编辑器”中指定安装程序操作。有关MSDN库中自定义操作的信息很多。

另请参阅以下内容:

EventLogInstaller Class

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

答案 1 :(得分:1)

我现在无法记住或访问细节,但在设置项目的那个(可怕的)用户界面中应该有“标准”操作,其中包括创建EventLog。那将是最安全的方式。

但你应该可以测试这个没有UAC的。如果它工作,它的工作原理。 setup.exe以Admin

运行