1

我有以下情况:

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

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

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

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

我已经看到很多应用程序在做类似的事情并且可以写入 Program Files (x86) 文件夹(例如:日志文件)而不提示用户提升权限(清单)

任何想法这是如何工作的?

应用程序名称:pop_consoleApp2.exe 清单文件名称: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>
4

2 回答 2

2

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

System.Environment.SpecialFolder.CommonApplicationData

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

于 2013-06-01T13:53:27.097 回答
0

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

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

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

level属性替换为highestAvailable-

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

有关详细信息,请参阅MSDN的此处链接。

于 2013-06-01T12:05:42.110 回答