0

我将这个问题作为以下链接的一个系列提出

无法通过c#删除.exe文件

当我调试应用程序时,我可以删除 .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);
    }
4

2 回答 2

1

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

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

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

另一种方法是在您的项目中创建一个 App Manifest 文件并将级别设置为“管理员”。

创建应用程序清单-->右键单击项目->添加新项目->从右侧窗格中选择应用程序清单选项->单击确定

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

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

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

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

于 2013-08-21T01:18:35.870 回答
-1

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

于 2013-08-20T15:52:32.340 回答