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

aco*_*aco 16 .net uac programdata windows-vista

我在"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>
Run Code Online (Sandbox Code Playgroud)

Gro*_*kys 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用户永远不想在资源管理器中浏览此处,此处更改的设置应该影响计算机上的每个用户.在Windows Vista的安装上,默认位置是%systemdrive%\ ProgramData,这是一个隐藏文件夹.您需要创建目录并在安装时设置所需的ACL.

  • 关于"您需要创建目录并在安装时设置所需的ACL." 我怎么能这样做? (9认同)

Sim*_*der 5

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

  • 好吧,即使您以管理员身份登录,通常也没有所有管理员权限。这就是UAC的概念。当您要手动删除“程序文件”中某个位置的文件时,您的行为确实相同。但是,如果您以管理员身份运行应用程序(以“以管理员身份运行...开头”),则可以删除/创建该文件夹中的文件。您还可以通过清单文件强制应用程序以管理员身份运行。 (2认同)