【问题标题】:NLog does not write logs when installed from msi setup从 msi 安装程序安装时,NLog 不写入日志
【发布时间】:2021-12-17 09:26:03
【问题描述】:

我被这个用于生产安装程序的 NLog 卡住了。 我有一个设置项目来创建 .msi 文件,除了 NLog 之外一切正常,因为它不会在 /logs 文件夹中创建日志。使用调试或发布模式从 Visual Studio 运行应用程序,它只是写入日志。我无法弄清楚这个问题。

附:配置嵌入到 App.config 中。我注意到它通过使用绝对路径更改{basedir}/logs而不是exe文件所在的位置来写入其他位置。

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <variable name="appDataLogDir" value="${basedir}/logs" />
    <targets async="true">
      <target archiveEvery="Day" openFileFlushTimeout="2" maxArchiveFiles="30" name="logFile" type="File" fileName="${appDataLogDir}/log_${shortdate}.txt" layout="|-&gt; ${longdate:universalTime=true}|${level}|${message}${onexception:inner=|${exception:format=tostring}}" />
    </targets>
    <rules>
      <logger name="*" minlevel="Trace" writeTo="logFile" keepFileOpen="false" encoding="UTF-8" />
    </rules>
  </nlog>

【问题讨论】:

  • 检查 nlog 配置并查看要写入的文件的位置,并查看用户/进程(运行应用程序的身份)是否有权访问该 nlog 文件夹
  • 我更改了文件夹的访问权限,将其设置为所有人,但仍然没有任何反应。
  • 您可以在问题中包含nlog.config 吗?也许考虑使用${specialfolder} 将日志文件写入 ProgramData。另见:github.com/NLog/NLog/wiki/Logging-troubleshooting

标签: c# nlog


【解决方案1】:

我可以通过以管理员身份运行 exe 文件来修复它。运行该程序的程序是 Windows 8。我认为默认情况下我的setup.msi 安装时不是管理员,或者 Windows 用户不是管理员,或者它现在是管理员,但不是原来的管理员。

要使其成为半永久性的,您可以通过右键单击 exe 然后Compatibility tab -&gt; Change settings for all users -&gt; check the Run this program as an administrator 将 exe 属性更改为以管理员身份运行。或者暂时以管理员身份运行,你可以右击然后Run as administrator

【讨论】:

  • 听起来像是 Windows Vista(和更新版本)用于处理不符合标准的旧版应用程序的默认 shim。这个 shim 创建了一个沙箱,因此应用程序认为它可以在任何地方写入,但它只是写入其隔离的沙箱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多