Windows窗体中拒绝访问

时间:2013-08-20 15:37:15

标签: c# winforms exception

Iam将此问题作为以下链接的系列文章

Unable to delete .exe file through c#

当我调试应用程序时,我能够删除.exe文件。但是当我在桌面上安装后尝试删除应用程序时,再次将异常消息视为“访问被拒绝”。

修改: -

我用来删除文件的代码

    public bool deleteAppExecutable(string filePath)
    {
        try
        {

            if (File.Exists(filePath))
            {

                var di = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);
                di.Attributes &= ~FileAttributes.ReadOnly;
                SetAccessRule(filePath);
                File.SetAttributes(filePath, File.GetAttributes(filePath) & ~FileAttributes.ReadOnly);
                File.Delete(filePath);

            }
            return true;
        }
        catch (Exception ex)
        {
           return false;
        }
    }


    public static void SetAccessRule(string filePath)
    {

        FileInfo dInfo = new FileInfo(filePath);

        FileSecurity dSecurity = dInfo.GetAccessControl();


        dSecurity.AddAccessRule(new FileSystemAccessRule(Environment.UserName, FileSystemRights.Delete, AccessControlType.Allow));
        dInfo.Refresh();
        dInfo.SetAccessControl(dSecurity);
    }

2 个答案:

答案 0 :(得分:1)

我找到了解决方案,为什么我的应用程序中出现“访问被拒绝”异常。

由于我通过代码删除应用程序内的文件,我需要拥有“管理员”的权限。

一种方法是让用户以管理员身份手动登录。但这不是更好的选择。

另一种方法是在项目中创建App Manifest文件,并将级别设置为“administrator”。

创建App Manifest - >右键单击项目 - >添加新项目 - >从右侧窗格中选择App Manifest选项 - >单击确定

打开清单文件并将级别更改为“requireAdministartor”。

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

这将解决运行应用程序时的问题,它将提示用户以管理员身份运行。

希望这对将来有所帮助。 :)

答案 1 :(得分:-1)

检查您是否拥有exe所包含的文件夹(及其所有子对象)的完全权限