Visual C#-在哪里存储处理文件&;做工作而不是C:ProgramFiles

本文关键字:工作 ProgramFiles amp 存储 在哪里 C#- 存储处 处理 文件 Visual | 更新日期: 2023-09-27 17:59:49

我对编程还很陌生,我不知道所有的最佳实践,所以在这里我要问的是,当涉及到文件处理的位置时,最佳实践是什么。

我创建了一个Winforms程序,可以进行视频修剪/转换。我的程序当前安装到用户的C:''ProgramFiles(x86)目录中,我将视频处理所需的所有必要文件都放在那里。不幸的是,为了在运行时访问这些文件并移动它们,需要提升UAC。我目前已将程序设置为以管理员身份运行,但我不想再要求程序必须以管理员身份进行运行。

那么,最佳做法是什么呢?在安装过程中,我应该把这些文件放在哪里?在不以管理员身份运行程序的情况下,我如何访问它们?

Ps:我不再希望我的程序以管理员身份运行的原因是,这使得允许拖动变得非常困难;将文件放到windows窗体上。

Visual C#-在哪里存储处理文件&;做工作而不是C:ProgramFiles

看看Environment.SpecialFolder枚举,您会希望将路径基于其中一个,可能是ApplicationData或LocalApplicationData。通常,您会在其中一个带有公司、产品或程序名称的子目录中创建一个子目录,并在其中创建数据、配置、日志等的子目录。鉴于视频可能很大,您希望为用户提供一种设置数据路径的方法(例如,用户可能希望使用不同的驱动器,如ssd)。因此,从SpecialFolder枚举中提供一个默认值,但允许用户用用户提供/选择的路径覆盖它。

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)(例如C:''ProgramData'')是存储软件所有用户共享的数据的好地方。所有用户都可以访问这些数据,因此出于隐私考虑,请记住这一点。

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)(例如C:''Users''Username''AppData''Local'')如果用户从另一台计算机登录到网络,则是存储不需要同步的数据的好地方。例如,在这里存储调试日志是有意义的。

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)(例如C:''Users''Username''AppData''Roaming'')。如果用户从另一台计算机登录到网络,存储需要同步的数据的好地方。例如,在这里存储ini文件是有意义的,因为用户希望拥有与以前相同的设置。

Path.GetTempPath()(例如C:''Users''Username''AppData''Local''Temp)是存储软件关闭后不需要存在的文件的好地方。

一般的解决方案是保留应用程序二进制文件和在%ProgramFiles%中不会更改但在%AppData%中修改的文件。这不需要管理员权限,而且您通常不希望每个用户的文件都相同,这样做很方便。您可能还想使用LocalRoaming,这取决于您存储的文件类型,但使用Roaming似乎是软件中最常见的东西。

另一种方法(至少我对一些做得不好的程序就是这样做的)是进入软件目录属性,并赋予普通用户在那里编写的权利。然而,我不知道如何在安装程序中完成,我认为这不是一个好的做法(当你使用旧软件时,更多的是一种变通方法)。