Dot-Net
寫入“ProgramData”文件夾(W7 和 Vista).NET
我在“程序文件”目錄下安裝我的應用程序。我在“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>
這是 UAC 的事情。您讓您的程序以管理員身份執行,以便在此 SpecialFolder 中創建/刪除文件/文件夾。
可以在此處找到有關可以儲存程序數據的不同位置的易於理解的說明:
<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。