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

C# 无法通过c删除.exe文件,c#,winforms,C#,Winforms,我在windows窗体应用程序中有一个“更新”按钮。当用户单击“更新”按钮时,应用程序将检查应用程序的当前版本和从Web服务获取的服务器中可用的版本。如果版本不匹配,应用程序将从从webservice获得的路径下载新版本 我目前正在同一个解决方案中使用两个项目 运行应用程序的主项目 更新项目-其用途是删除.exe文件并下载新的.exe文件。添加更新项目作为主项目的参考 问题是,当我试图通过update project中的代码删除mainproject.exe时,它会显示一个异常,表示捕获了未经授

我在windows窗体应用程序中有一个“更新”按钮。当用户单击“更新”按钮时,应用程序将检查应用程序的当前版本和从Web服务获取的服务器中可用的版本。如果版本不匹配,应用程序将从从webservice获得的路径下载新版本

我目前正在同一个解决方案中使用两个项目

运行应用程序的主项目

更新项目-其用途是删除.exe文件并下载新的.exe文件。添加更新项目作为主项目的参考

问题是,当我试图通过update project中的代码删除mainproject.exe时,它会显示一个异常,表示捕获了未经授权的异常。有人知道为什么会发生这种情况吗?或者有人对在应用程序中使用更新功能有更好的想法吗

这是我用来删除文件的代码

编辑:-


调试应用程序时,我可以删除.exe文件。但是,当我在桌面上安装应用程序后尝试删除该应用程序时,我再次收到异常消息,因为访问被拒绝

应用程序是否正在运行,这就是它无法删除可执行文件的原因?如果是这样,您可以重命名正在运行的可执行文件,并将新版本放在它的位置。新版本将在下次启动应用程序时执行。

在“更新”按钮中,您可以作为单独的进程启动另一个小应用程序,在小应用程序中,您可以使用以下代码终止进程,然后删除原始应用程序

try
{
    Process [] proc Process.GetProcessesByName("YourAppName");
    proc[0].Kill();
}

我在我的应用程序中找到了iam获得访问被拒绝异常的解决方案

由于iam通过代码删除应用程序中的文件,因此我需要具有管理员权限

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

另一种方法是在项目中创建应用程序清单文件,并将级别设置为Administrator

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
创建应用程序清单->右键单击项目->添加新项目->从右窗格中选择应用程序清单选项->单击确定

打开清单文件并将级别更改为RequireReadMiniStartor

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
这将解决运行应用程序时的问题,它将提示用户以管理员身份运行


希望这对将来的人有所帮助感谢大家的支持。

为什么不先下载update.exe,然后在关闭当前运行的实例之前运行它呢,然后update.exe将检查并删除mainproject。exe@KingKing:让我试试这个…你可能是对的,应用程序可能正在运行。如果应用程序正在运行,我可以重命名应用程序吗???@Mothy,不行。你不能重命名被进程锁定的文件,无论是exe还是数据文件。运行更新之前,您需要完全关闭主应用程序。@gunr217:如果我使用application.Exit关闭主应用程序..我是否能够在整个过程中快速更新应用程序?实际上,你可以重命名正在运行的可执行文件。哦……你说得对。在第一个项目中启动小应用程序后,我实际上是在杀死该应用程序。我应该在小应用程序中完成上述过程。真的帮了我的忙。谢谢..:在桌面上安装后,Iam无法删除应用程序。但在调试应用程序时,Iam能够删除.exeapplication@Mothy,请检查您的进程是否仍在运行,同时尝试删除它。使用任务管理器可以查看。您可以做一些有趣的事情,例如,在您的小应用程序中停止进程,睡眠5秒,在此期间,您可以检查Task Manager进程是否仍在运行。如果进程仍在运行,请手动终止它。查看您的小应用程序是否可以删除它。试着找出问题的原因。不,进程没有在任务管理器中运行。我已经检查过了。错误是什么?访问被拒绝?您是否将异常记录在文件中?这可能是一个特权问题吗?在管理员模式下运行?请确保仅对更新应用程序执行此操作。Windows切换到不使用管理员权限(包括更改程序文件中的任何内容)运行用户应用程序是有充分理由的,这就是更新程序失败的原因。请务必使用自签名证书,以确保您下载的更新程序和更新的EXE和DLL实际上是您自己制作的,而不是由任何其他人修改的SNK已经足够了,但您必须手动检查它;或者至少,使用HTTPS进行下载。我经常看到自动更新程序下载病毒,这已经不再有趣了。