簡體   English   中英

在為64位Windows計算機創建構建時,出現“不允許訪問數據庫文件”錯誤

[英]Getting “Access to database file is not allowed” error when creating a build for 64-bit windows machines

我正在創建一個現有的Windows桌面應用程序的新版本,該應用程序已經運行了好幾年。 該應用程序使用SqlServerCe數據庫,該數據庫安裝在計算機的DataDirectory中。 正在創建新版本的應用程序以與64位計算機兼容。 我已經將代碼遷移到Macbook上運行Windows 10的Parallels VM,我正在使用Visual Studio 2017構建新版本。構建工作正常(我使用安裝向導項目來創建安裝文件)。 但是,當我安裝應用程序時,第一次嘗試訪問數據庫時出錯。

錯誤是:不允許訪問數據庫文件。 [1884,文件名= C:\\ ProgramData \\ CompanyName \\ ApplicationName \\ AppDataBase.sdf,SeCreateFile]。

.sdf未標記為只讀。 如果我轉到.sdf文件,一旦安裝它,並給Everyone(使用文件瀏覽器)提供讀,寫和修改權限,那么應用程序可以訪問該文件並且沒有錯誤。 但是,如果我嘗試使用File.SetAccessControl在我的代碼中執行此操作,則會再次出現訪問錯誤。 我沒有看到任何方法在安裝過程中使用安裝向導功能(文件系統視圖)設置.sdf文件的權限。

這是我正在使用的連接字符串:

<connectionStrings>
<add name="ApplicationName.Properties.Settings.ApplicationNameConnectionString"
            connectionString="Data Source=|DataDirectory|AppDataBase.sdf"
            providerName="Microsoft.SqlServerCe.Client.4.0" />
</connectionStrings>

在使用Visual Studio 2010構建並在x86計算機上部署時,這很方便。 提前感謝您提供任何建議。

聽起來它可能是UAC

確保您正在運行exe(而不是msi),並且在安裝程序項目的LaunchConditions中將Privileged設置為true

還要確保通過右鍵單擊並選擇“以管理員身份運行”來運行應用程序

實質上 - 你的位置是錯誤的。 對於非管理員用戶,Windows 7(及更高版本)的文件夾%SystemDrive%\\ProgramData\\MyCompany\\MyApp默認為只讀,應該用於機器配置。 我建議你閱讀

https://blogs.msdn.microsoft.com/patricka/2010/03/18/where-should-i-store-my-data-and-configuration-files-if-i-target-multiple-os-versions/

正確的位置(我假設它的基礎是應該在多個用戶之間共享的db文件)是Per Machine“Documents”

用戶在用戶中創建/打開/關閉/保存的“文檔”類型文件。 這些通常是模板或公共文檔。

示例:MyTemplate.dot

Windows 7:C:\\ Users \\ Public

Vista:%SystemDrive%\\ Users \\ Public

XP:%ALLUSERSPROFILE%\\ Documents

環境變量:

Vista / Win7:%PUBLIC% 注意:XP上不存在

已知文件夾ID:FOLDERID_PublicDocuments

System.Environment.SpecialFolder:System.Environment.SpecialFolder.CommonDocuments

CSIDL:CSIDL_COMMON_DOCUMENTS

為什么不簡單地使用%APPDATA%?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM