在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;
}
}
}
}
此项目的输出被吸入安装项目。然后我有两个自定义操作:
我不期待免费的代码审查,但是我在这里冒险进入未知领域,所以如果我抓错了垃圾,我会很感激。
PS我特别担心我正在指定实际的日志名称,但不是实际的来源。这有关系吗?
答案 0 :(得分:2)
使用“System.Diagnostics”程序集中的“EventLogInstaller”可能会更好。
您可以在创建自定义组件时看到此实现,然后将事件日志组件添加到设计图面,填写组件的属性,然后在属性窗口中单击“添加安装程序”链接/命令。这将添加一个项目安装程序组件,该组件将包含一个事件日志安装程序组件。
事件日志安装程序组件是您正在寻找的,基本上它是一个Windows安装程序操作,可以在您创建Windows安装程序包(MSI)时运行。您所要做的就是在Visual Studio部署项目的“自定义操作编辑器”中指定安装程序操作。有关MSDN库中自定义操作的信息很多。
另请参阅以下内容:
安装程序工具(Installutil.exe) - msdn.microsoft.com/en-us/library/50614e95(VS.80).aspx
答案 1 :(得分:1)
我现在无法记住或访问细节,但在设置项目的那个(可怕的)用户界面中应该有“标准”操作,其中包括创建EventLog。那将是最安全的方式。
但你应该可以测试这个没有UAC的。如果它工作,它的工作原理。 setup.exe以Admin
运行