使用C#访问系统目录

时间:2019-01-02 13:32:30

标签: c# database file access

我有一个包含本地数据库的程序 当我从非系统目录运行它时,它运行良好,但是当我从程序文件目录等系统目录运行时,我无法访问我的数据库 我正在使用c#wpf。不知道如何访问我的数据库:/

使用与该数据库一起使用的实体数据模型在应用程序目录中(该目录将位于程序文件目录中,就像我安装的所有其他应用程序一样,例如Adobe应用程序MS Office等。)它们如何访问自己的数据库程序文件目录中的数据未经用户许可? :((

4 个答案:

答案 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"]);
    }
}

只需在窗口中检查您的文件夹权限(如图片所示)


更多详细信息

1。软件

软件是告诉计算机如何工作的数据或计算机指令的集合

  • 为简单起见,有两种主要类型

    • 操作系统软件

    • 应用软件

2。操作系统软件

操作系统(OS)是管理计算机硬件和软件资源并为计算机程序提供通用服务的系统软件。

3。目录结构

在计算中,目录结构是操作系统的文件系统及其文件显示给用户的方式。文件通常以分层树结构显示。

4。 Windows 10 [用户名] \ AppData

此文件夹存储每个用户的应用程序数据和设置。该文件夹包含三个子文件夹:漫游,本地和LocalLow。漫游用于漫游配置文件的基于网络的登录。用户登录时,保存在漫游中的数据将同步到计算机。 Local和LocalLow无法与联网计算机同步

5。指南:存储和检索设置以及其他应用数据

  • 应用程序数据是特定于特定应用程序的可变数据。它包括运行时状态,用户首选项和其他设置。

  • 应用程序数据不同于用户数据,用户数据是用户在使用应用程序时创建和管理的数据。用户数据包括文档或媒体文件,电子邮件或通讯记录或包含用户创建内容的数据库记录。用户数据可能对多个应用程序有用或有意义。

  • 通常,这是用户想要作为独立于应用程序本身的实体(例如文档)进行操纵或传输的数据。

-有关应用程序数据的重要说明:应用程序数据的生存期与应用程序的生存期相关。如果删除该应用程序,则所有应用程序数据将因此丢失。请勿使用应用程序数据存储用户数据或用户可能认为有价值和不可替代的任何内容。我们建议使用用户的库和Microsoft OneDrive存储此类信息。应用数据非常适合存储特定于应用的用户首选项,设置和收藏夹。

6。访问控制

访问控制是指控制谁可以访问操作系统(OS)中文件(资源)的安全性功能。

7。操作系统和应用软件之间的关系是什么

  • 所有应用程序都调用操作系统(OS)上的访问控制功能,以访问特定资源或控制对应用程序提供的资源的访问。

  • 因此您的应用程序需要您作为对操作系统具有控制权的用户,向操作系统询问文件夹权限

  • 因此您需要C#代码+操作系统许可

8。如何应用这些概念

  • 8.1。以管理员身份运行,因为他们具有访问权限
  • 8.2。检查应用程序所在的文件夹
  • 8.3。向当前用户的文件夹添加权限

8.1。以管理员身份运行,因为他们有权访问

8.1.1方式

enter image description here

8.1.2为什么

enter image description here

8.1.3为什么不这么做

Why you shouldn’t run as admin… – Aaron Margosis' Non-Admin, App-Compat and Sysinternals WebLog

如果恰好是为了利用漏洞而编写的,因此它需要管理员权限(和许多人一样),只要以用户身份运行就可以将其杀死。但是,如果您以管理员身份运行,则漏洞利用程序可以:

  • 安装内核模式rootkit和/或键盘记录程序(可能几乎无法检测到)
  • 安装和启动服务
  • 安装ActiveX控件,包括IE和Shell加载项(间谍软件和广告软件常见)
  • 访问属于其他用户的数据
  • 使代码在任何其他人登录时运行(包括捕获在Ctrl-Alt-Del登录对话框中输入的密码)
  • 用特洛伊木马替换操作系统和其他程序文件
  • 访问LSA机密,包括其他敏感帐户信息,可能还包括域帐户的帐户信息
  • 禁用/卸载防病毒软件
  • 在事件日志中找到其踪迹
  • 使计算机无法启动
  • 如果您的帐户是网络上其他计算机的管理员,则该恶意软件也将获得对这些计算机的管理员控制权
  • 还有很多

8.2。检查应用程序所在的文件夹

In Windows chec

enter image description here

enter image description here

8.3。向当前用户的文件夹添加权限

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

参考

答案 3 :(得分:0)

您不应将程序数据保存在“程序”应用程序文件夹中,因为在不更改用户权限或使用管理权限的情况下您无权访问它。您应该为此使用Environment.SpecialFolder

例如

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\YourApplication"

这也是例如正在使用Adobe Flash或MS Office。