gpt4 book ai didi

c# - "Access to path denied"问题

转载 作者:行者123 更新时间:2023-11-30 15:29:25 27 4
gpt4 key购买 nike

1) 我试图以这种方式以编程方式创建目录

if (!Directory.Exists(Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "\\VoiceRecords"))
{
Directory.CreateDirectory(Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "\\VoiceRecords");
}

当我在 Debug模式下运行我的应用程序时,上面的代码工作正常,但是在创 build 置之后,当我安装时,当上面的行执行并尝试在我的应用程序安装位置创建文件夹时,问题就开始了。消除此问题的最佳方法是什么,因为我会将此设置分发给第 3 部分,他们可以在我可能不知道的任何地方安装我的应用程序。

2) 当我尝试在 app.config 文件中保存任何值时出现错误。错误屏幕截图在这里。 enter image description here

现在我想展示我如何在运行时将数据写入配置

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if (config.AppSettings.Settings["localVoiceRecordsPath"].Value != null || config.AppSettings.Settings["localVoiceRecordsPath"].Value.Trim() != "")
{

config.AppSettings.Settings["localVoiceRecordsPath"].Value = SettingsPopup.txtPath.Text.Replace(",", string.Empty);
config.Save(ConfigurationSaveMode.Modified);
SettingsPopup.txtPath.Text = config.AppSettings.Settings["localVoiceRecordsPath"].Value.Replace(",", string.Empty);
}
else
{
config.AppSettings.Settings.Add("localVoiceRecordsPath", SettingsPopup.txtPath.Text.Replace(",", string.Empty));
config.Save(ConfigurationSaveMode.Modified);
SettingsPopup.txtPath.Text = config.AppSettings.Settings["localVoiceRecordsPath"].Value.Replace(",", string.Empty);
}

当我在 Debug模式下运行我的应用程序时一切正常,但当我从安装程序安装应用程序然后运行时出现问题。我想发生了某种与权限相关的问题。寻找最佳指导。谢谢

编辑

问题解决了。我以这种方式在管理模式下以编程方式运行我的应用程序

static bool IsRunAsAdmin()
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (Environment.OSVersion.Version.Major >= 6)
{
if (!IsRunAsAdmin())
{
ProcessStartInfo proc = new ProcessStartInfo();
proc.UseShellExecute = true;
proc.WorkingDirectory = Environment.CurrentDirectory;
proc.FileName = Application.ExecutablePath;
proc.Verb = "runas";

try
{
Process.Start(proc);
}
catch
{
// The user refused the elevation.
// Do nothing and return directly ...
return;
}

Application.Exit(); // Quit itself
}
else
{
Application.Run(new frmMain());
}
}
else
{
Application.Run(new frmMain());
}
}

最佳答案

您可能需要以管理员模式运行该应用程序以授予它正确的权限。

这里有一些示例代码/说明如何检查您当前处于什么模式以及如何提升它:

http://code.msdn.microsoft.com/windowsdesktop/CSUACSelfElevation-644673d3

但是要坚强!在执行此逻辑之前,请确保您在 Vista 或更高版本的系统上运行,否则如果您尝试执行 UAC/elevation 代码,它将破坏早期操作系统的向后兼容性。

您甚至可以使用应用程序 list /修改它来自动提升:

http://msdn.microsoft.com/en-us/library/aa374191(VS.85).aspx

有关使用应用程序 list 方法的更多信息:

http://www.aneef.net/2009/06/29/request-uac-elevation-for-net-application-managed-code/

关于c# - "Access to path denied"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23760085/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com