我正在尝试使用Windows服务安装程序为Windows服务(该服务是LocalSystem帐户)运行一些自定义操作代码,并且出现以下错误消息:
安装MSI时出现错误消息:
Error 1001. An Exception occurred in the OnAfterInstall event handler
of System.ServiceProcess.ServiceInstaller. --> Access to the path XXX
is denied.
此代码抛出错误:
protected override void OnAfterInstall(IDictionary savedState)
{
string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
System.IO.File.WriteAllText(path, "test");
}
在代码处,我试图访问服务.exe目录,以便删除在此创建的文件
我的目标是对安装/卸载过程进行自定义操作。我想删除安装后创建的文件,例如日志和配置文件。
谢谢
答案 0 :(得分:1)
您正在尝试将文本写入目录而不是文件。变量“ path”是从目录Path.GetDirectoryName()返回的。在下一行中,您正在尝试对此变量执行File.WriteAllText(),从而导致错误。
答案 1 :(得分:0)
Path.Combine :正如其他人已经提到的,您需要指定适当的完整路径(路径和文件名)。也许使用
Path.Combine
?例如:
System.IO.File.WriteAllText(Path.Combine(path, "filename.txt"), "test");
替代品 :我不是.NET专家,所以我不使用托管代码自定义操作。但是,如果它们是基于DTF的,我不确定它们在当前目录或执行目录方面是否有问题。列出一些其他链接:
Environment.SpecialFolder
(获取各种特殊文件夹)和 Environment.CurrentDirectory
(获取当前目录)。AppDomain.CurrentDomain.BaseDirectory
:Getting the absolute path of the executable, using C#?。GetEntryAssembly
:C# – Getting the Directory of a Running Executable。