这是一个非常简单的问题。
注意:我相信人们已经找到并在某处发布了同样的问题,但我找不到正确的搜索字词来查找它。
好的,这是我的问题。
假设我的程序存储在C:\Program Files (x86)\MyProgram\Program.exe
。
现在在程序中,它基本上是
Directory.CreateDirectory(Application.StartUpPath + "\\Files")
基本上,这会在与程序本身相同的文件夹中创建一个名为Files的目录。 假设我有在该位置创建文件夹,因此不能选择使用其他位置。
所以真正的问题是,如果它位于c:\ Program Files目录中,当我尝试创建文件夹时,我的程序会被“拒绝访问”。
那么如何在不强迫用户以管理员身份运行的情况下,让这样的东西工作呢?
答案 0 :(得分:7)
如果是在Windows 7中,如果UAC升级,则无法通过“以管理员身份运行”来自行修改c:\ Program Files中的任何内容。
由于Windows是一个多用户操作系统,因此存储任何特定于用户的内容都会导致灾难。
程序放置数据的正确位置在相应的特殊文件夹中,您可以通过
获取/创建该文件夹// user-specific application data is stored here
string userSpecificAppDataDirectory = Environment.GetFolderPath(
SpecialFolder.ApplicationData ,
SpecialFolderOption.Create
) ;
// application data common to all users is stored here
string commonAppDataDirectory = Environment.GetFolderPath(
SpecialFolder.CommonApplicationData ,
SpecialFolderOption.Create
) ;
或其他Environment.GetFolderPath()
重载之一。
答案 1 :(得分:4)
在现代操作系统中,文件夹C:\ program files(x86)受OS写保护。如果不使用管理帐户,则无法在此处创建子文件夹(在这种情况下,除非您禁用UAC,否则系统会要求您确认此操作)。因此,正确的方法是在其他地方创建数据文件夹。最佳选项是使用以下方法提取的CommonApplicationData文件夹:
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
或者SpecialFolder.ApplicationData枚举,如果您的数据应该由应用程序的当前用户区分,或者如果这些文件是由您的用户生成并且需要由其他程序自由打开(或者需要是),则可以使用SpecialFolder.MyDocuments包含在备份中)
获取操作系统提供的特殊文件夹以存储应用程序数据后,请记住根据您的要求为您的应用程序和其他子文件夹创建子文件夹
// In Win7 this usually resolves to C:\ProgramData, but do not use this folder
string appCommon = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
// This resolves to C:\programdata\your_app_name\files
string appData = Path.Combine(appCommon, "your_app_name", "files");
// This will create all directories in the specified path one by one....
if(!Directory.Exists(appData)) Directory.CreateDirectory(appData);
答案 2 :(得分:1)
您可以尝试在安装过程中创建所需的任何文件或文件夹。我不确定如果使用第三方安装创建者会有什么成功,但我的理解是通过发布选项卡中的应用程序文件... 按钮添加的项目然后,Visual Studio中的项目属性部分具有本应授予应用程序使用的访问权限。