gpt4 book ai didi

c# - 部署和使用静态内容以与 Windows 服务一起使用

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:01 24 4
gpt4 key购买 nike

我正在尝试创建一个从 Linq-to-SQL 数据访问层提取数据的 Windows 服务。对于 DAL,我使用外部 XML 映射文件。

事情似乎构建得很好,但是在我安装服务并尝试启动它之后,我收到以下错误:

Service cannot be started. System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Windows\system32\Generated\SpiSytelineMapping.xml'.

首先,我试图弄清楚为什么它在 system32 目录而不是服务可执行文件所在的目录中查找映射文件。

即便如此,当我浏览到 system32 目录时,我惊讶地发现内容文件确实被复制到了那里。

C:\Windows\System32\Generated>dir

Directory of C:\Windows\System32\Generated

08/24/2011 02:32 PM <DIR> .
08/24/2011 02:32 PM <DIR> ..
08/24/2011 02:09 PM 447,079 AbcSytelineMapping.xml
08/24/2011 02:09 PM 442,374 HtiSytelineMapping.xml
01/19/2011 05:07 PM 445,155 MpiCorpSytelineMapping.xml
08/24/2011 02:09 PM 464,353 SpiSytelineMapping.xml
08/24/2011 02:09 PM 440,483 SytelineMapping.xml
5 File(s) 2,239,444 bytes
2 Dir(s) 56,826,531,840 bytes free

因为文件在那里,我的第一个假设是这是一个权限问题,但是目录和文件对“所有人”都有读取权限,我尝试在“管理员”、“本地服务”下启动服务, “本地系统”和我的帐户(这也是一个管理员帐户。都因同样的错误而失败。

值得注意的是,这些文件还与可执行文件一起出现在应用程序的安装目录中。

任何人都可以阐明我遗漏的这里可能发生的事情吗?

最佳答案

当 Windows 服务启动时,它在 c:\windows\system32 中启动,也许您可​​以在加载映射时这样做:

string connStr = "server=.;database=AdventureWorksLT;integrated security=true;";
string currentPath=System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
using (CustomDataContext context = new CustomDataContext(connStr, XmlMappingSource.FromUrl(currentPath+"\\CustomerMapping.xml")))
{

}

强制从windows服务所在的当前目录加载xml。

关于c# - 部署和使用静态内容以与 Windows 服务一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7180755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com