我有一个包含本地数据库的程序 当我从非系统目录运行它时,它运行良好,但是当我从程序文件目录等系统目录运行时,我无法访问我的数据库 我正在使用c#wpf。不知道如何访问我的数据库:/
使用与该数据库一起使用的实体数据模型在应用程序目录中(该目录将位于程序文件目录中,就像我安装的所有其他应用程序一样,例如Adobe应用程序MS Office等。)它们如何访问自己的数据库程序文件目录中的数据未经用户许可? :((
答案 0 :(得分:1)
我将其发布为answear,因为目前还无法发表评论,但是我会检查以下内容:
但是没有代码,很难分辨
答案 1 :(得分:1)
没有错误消息,很难猜测出您的问题是什么。
我的猜测:您需要管理员特权才能写入C:\Program Files
。
您的程序(文件或数据库)所更改的数据不应包含在此目录中!
这是一种安全机制,可以保护您的程序(不仅是您创建的程序)不受其他用户更改。
答案 2 :(得分:1)
编辑:此处为使用应用数据文件夹的代码
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
GetDB();
}
void GetDB1()
{
var DBFile = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "DB1");
var con = new System.Data.SQLite.SQLiteConnection($"Data Source={DBFile}.sqlite;Version=3;");
con.Open();
string sql = "Select 1 as col1";
var command = new System.Data.SQLite.SQLiteCommand(sql, con);
var reader = command.ExecuteReader();
while (reader.Read())
Console.WriteLine("col1: " + reader["col1"]);
}
}
软件是告诉计算机如何工作的数据或计算机指令的集合
为简单起见,有两种主要类型
操作系统软件
应用软件
操作系统(OS)是管理计算机硬件和软件资源并为计算机程序提供通用服务的系统软件。
在计算中,目录结构是操作系统的文件系统及其文件显示给用户的方式。文件通常以分层树结构显示。
此文件夹存储每个用户的应用程序数据和设置。该文件夹包含三个子文件夹:漫游,本地和LocalLow。漫游用于漫游配置文件的基于网络的登录。用户登录时,保存在漫游中的数据将同步到计算机。 Local和LocalLow无法与联网计算机同步
应用程序数据是特定于特定应用程序的可变数据。它包括运行时状态,用户首选项和其他设置。
应用程序数据不同于用户数据,用户数据是用户在使用应用程序时创建和管理的数据。用户数据包括文档或媒体文件,电子邮件或通讯记录或包含用户创建内容的数据库记录。用户数据可能对多个应用程序有用或有意义。
通常,这是用户想要作为独立于应用程序本身的实体(例如文档)进行操纵或传输的数据。
-有关应用程序数据的重要说明:应用程序数据的生存期与应用程序的生存期相关。如果删除该应用程序,则所有应用程序数据将因此丢失。请勿使用应用程序数据存储用户数据或用户可能认为有价值和不可替代的任何内容。我们建议使用用户的库和Microsoft OneDrive存储此类信息。应用数据非常适合存储特定于应用的用户首选项,设置和收藏夹。
访问控制是指控制谁可以访问操作系统(OS)中文件(资源)的安全性功能。
所有应用程序都调用操作系统(OS)上的访问控制功能,以访问特定资源或控制对应用程序提供的资源的访问。
因此您的应用程序需要您作为对操作系统具有控制权的用户,向操作系统询问文件夹权限
因此您需要C#代码+操作系统许可
Why you shouldn’t run as admin… – Aaron Margosis' Non-Admin, App-Compat and Sysinternals WebLog
如果恰好是为了利用漏洞而编写的,因此它需要管理员权限(和许多人一样),只要以用户身份运行就可以将其杀死。但是,如果您以管理员身份运行,则漏洞利用程序可以:
答案 3 :(得分:0)
您不应将程序数据保存在“程序”应用程序文件夹中,因为在不更改用户权限或使用管理权限的情况下您无权访问它。您应该为此使用Environment.SpecialFolder。
例如
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\YourApplication"
这也是例如正在使用Adobe Flash或MS Office。