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>
您可以使用通用应用程序数据文件夹(通常命名为'Program data ',系统驱动器根目录下的隐藏文件夹)。这是一个非漫游用户独立的应用程序数据文件夹。它的位置在这个变量中给出:
System.Environment.SpecialFolder.CommonApplicationData
您可以为您的应用程序创建一个子文件夹。另外,你可以/应该在设置服务时设置该文件夹的权限(例如,服务帐户读/写,所有用户读访问)。
您需要将app.manifest
文件添加到您的项目中以将elevated permission
提供给用户-
默认情况下,如果您只是在项目中添加manifest文件,您将在文件中看到以下行-
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
将level
属性替换为highestAvailable
-
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
详情请参考MSDN的链接