c#编写和读取应用程序设置和日志文件的最佳实践(UAC程序文件x86)

本文关键字:文件 UAC 程序 x86 最佳 读取 应用程序 设置 日志 | 更新日期: 2023-09-27 18:16:43

我有以下场景:

1。一个正在运行的Windows服务,它收集一些应该存储在中心位置的数据(文件)。为了知道需要存储哪些文件,我希望有一个configuration.xml文件或类似的文件。还写了一些日志

2。对于一个小的windows窗体应用程序,我希望能够更改该configuration.xml文件中的设置。

第一个问题:这个论坛的很多人建议使用AppData文件夹来存储应用程序设置。但在我看来,我不能这样做,因为有可能是另一个用户登录到计算机。(不同的用户文件夹)并且每次收集的文件应该保存在同一个文件夹中,而不是不同的用户文件夹。

第二个问题:如果我尝试使用Program Files (x86)文件夹,即使用户是本地管理员组的成员,我也会得到权限拒绝错误。

我看到很多应用程序做类似的事情,可以写入程序文件(x86)文件夹(例如:日志文件),而不提示用户提升权限(manifest)

你知道这是怎么回事吗?

ApplicationName: pop_consoleApp2.exeManifest-fileName: pop_consoleApp2.exe.manifest

清单:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="pop_consoleApp2"
     type="win32"/>
  <description>Description of your application</description>
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="highestAvailable"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

c#编写和读取应用程序设置和日志文件的最佳实践(UAC程序文件x86)

您可以使用通用应用程序数据文件夹(通常命名为'Program data ',系统驱动器根目录下的隐藏文件夹)。这是一个非漫游用户独立的应用程序数据文件夹。它的位置在这个变量中给出:

System.Environment.SpecialFolder.CommonApplicationData

您可以为您的应用程序创建一个子文件夹。另外,你可以/应该在设置服务时设置该文件夹的权限(例如,服务帐户读/写,所有用户读访问)。

您需要将app.manifest文件添加到您的项目中以将elevated permission提供给用户-

默认情况下,如果您只是在项目中添加manifest文件,您将在文件中看到以下行-

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

level属性替换为highestAvailable -

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

详情请参考MSDN的链接