写入“ProgramData”文件夹(W7和Vista).NET

时间:2010-03-02 12:09:38

标签: .net uac windows-vista programdata

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

Environment.SpecialFolder.CommonApplicationData

在programData中我创建了用于保存数据的文件夹。例如:

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

在XP下运行正常。但不是在Vista或W7 OS下。

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

我可以无限制地存储数据?我需要将商店数据存储在对所有用户可见的文件夹中

编辑:

我在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>

3 个答案:

答案 0 :(得分: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   在安装时需要。

答案 1 :(得分:4)

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

答案 2 :(得分:0)

初看起来是一个概念问题:

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