16

我在“程序文件”目录下安装我的应用程序。我在“ProgramData”目录下安装数据:

Environment.SpecialFolder.CommonApplicationData

在 programData 我创建了文件夹来保存数据。例子:

C:\ProgramData\MyApp\MyData\这里我有文件和文件夹

XP下一切正常。但不在 Vista 或 W7 操作系统下。

我可以读取此目录中的文件,但无法写入文件,无法创建新文件等。用户以管理员身份登录。

我可以在哪里不受限制地存储数据?我需要将数据存储在对所有用户可见的文件夹中

编辑:

我的 app.manifest 文件中有这段代码:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- Opciones del manifiesto de Control de cuentas de usuario
             Si desea cambiar el nivel de Control de cuentas de usuario de Windows, reemplace el 
             nodo requestedExecutionLevel por alguno de los siguientes.

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

            Si desea utilizar la virtualización de archivos y del Registro para la compatibilidad 
            con versiones anteriores, elimine el nodo requestedExecutionLevel.
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>
4

3 回答 3

8

可以在此处找到有关可以存储程序数据的不同位置的易于理解的说明:

http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx

至于 ProgramData,它说:

FOLDERID_ProgramData / System.Environment.SpecialFolder.CommonApplicationData 用户永远不想在资源管理器中浏览此处,此处更改的设置会影响机器上的每个用户。默认位置是 %systemdrive%\ProgramData,它是 Windows Vista 安装上的隐藏文件夹。您需要在安装时创建目录并设置所需的 ACL。

于 2010-03-02T12:17:02.883 回答
5

这是 UAC 的事情。您让您的程序以管理员身份运行,以便在此 SpecialFolder 中创建/删除文件/文件夹。

于 2010-03-02T12:13:24.593 回答
0

乍一看这是一个概念问题:

您不应该使用“ProgramData”目录,而是使用一些用户特定的文件。所需的安装数据应安装在“程序文件”或注册表中。

于 2013-05-03T13:30:50.233 回答