无法更新Android Studio - Access Denied和java.io.FileNotFoundException

Sea*_*eau 18 android android-studio

我正在尝试在两台独立的Windows机器上将Android Studio从0.5.1更新到0.5.2,一台使用Windows 7 Pro 64位,另一台使用Windows 7 Enterprise 64位.

我得到了正常的更新提示:

在此输入图像描述

...如果我选择"更新并重新启动",则会下载补丁并退出IDE,但随后会出现以下对话框:

在此输入图像描述

我无法更改任何"解决方案"列条目.如果我单击"继续",我会收到如下所示的消息(图像和文本,因此其复制/粘贴/搜索友好):

在此输入图像描述

Temp. directory: C:\Users\Sean\AppData\Local\Temp\

java.io.FileNotFoundException: C:\Program Files (x86)\Android\android-studio\lib\jsch.agentproxy.usocket-nc.jar (Access is denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
at com.intellij.updater.Utils.copyStreamToFile(Utils.java:135)
at com.intellij.updater.CreateAction.doApply(CreateAction.java:52)
at com.intellij.updater.PatchAction.apply(PatchAction.java:140)
at com.intellij.updater.Patch$3.forEach(Patch.java:198)
at com.intellij.updater.Patch.forEach(Patch.java:248)
at com.intellij.updater.Patch.apply(Patch.java:194)
at com.intellij.updater.PatchFileCreator.apply(PatchFileCreator.java:86)
at com.intellij.updater.PatchFileCreator.apply(PatchFileCreator.java:77)
at com.intellij.updater.Runner.doInstallImpl(Runner.java:307)
at com.intellij.updater.Runner.doInstall(Runner.java:268)
at com.intellij.updater.Runner.access$000(Runner.java:18)
at com.intellij.updater.Runner$2.execute(Runner.java:258)
at com.intellij.updater.SwingUpdaterUI$7.run(SwingUpdaterUI.java:230)
at java.lang.Thread.run(Thread.java:744)
Run Code Online (Sandbox Code Playgroud)

当我点击"退出"时,Android Studio会重新打开,并告诉我更新仍然可用.

我之前在两台机器上使用相同的方法更新了Android Studio,没有任何问题.

由于我认为这是针对较新版本的Android Studio的某种错误,因此我在AOSP问题跟踪器上打开了问题67794.

编辑

我今天能够在两台机器上从0.5.2更新到0.5.3而不会遇到这个问题.我在以前的成功更新中看到了JetBrains安装程序的Windows安全提示,并且更新已成功完成,而无需启动具有提升权限的Android Studio.所以,似乎问题是0.5.1或0.5.2补丁特有的.

编辑

尝试从Android Studio 0.6.0更新到0.6.1时遇到类似的错误:

温度.目录:C:\ Users\barbeau\AppData\Local\Temp \

+ ----------------文件操作失败.这可能是由于文件被另一个应用程序锁定.请尝试关闭使用正在更新的文件的任何应用程序,然后按"重试".+ ----------------

com.intellij.updater.RetryException:无法在com的com.intellij.updater.BaseUpdateAction.replaceUpdated(BaseUpdateAction.java:40)中删除文件C:\ Program Files(x86)\ Android\android-studio1\lib\openapi.jar .intellij.updater.UpdateZipAction.doApply(UpdateZipAction.java:199)at com.intellij.updater.PatchAction.apply(PatchAction.java:140)at com.intellij.updater.Patch $ 3.forEach(Patch.java:198)在com.intellij.updater.Patch.forEach(Patch.java:248)com.intellij.updater.Patch.apply(Patch.java:194)com.intellij.updater.PatchFileCreator.apply(PatchFileCreator.java:86) )com.intellij.updater.PatchFileCreator.apply(PatchFileCreator.java:77)at com.intellij.updater.Runner.doInstallImpl(Runner.java:307)at com.intellij.updater.Runner.doInstall(Runner.java: 268)com.intellij.updater.Runner.access $ 000(Runner.java:18)at com.intellij.updater.Runner $ 2.execute(Runner.java:258)at com.intellij.updater.SwingUpdaterUI $ 7.run( SwingUpdaterUI.java:230)在java.lang.Thread.run(Thread.java:745)

如果您在Gradle构建过程仍在运行时尝试运行更新(例如,在您启动Android Studio之后),这似乎就会发生.

Sea*_*eau 28

解决方法:

  1. 关闭Android Studio.
  2. 右键单击"Android Studio"图标,然后选择"以管理员身份运行".
  3. 转到"帮助 - >检查更新...",然后完成正常的更新过程

经过几次0.5.1到0.5.2的更新尝试失败后,我意识到我不再获得Windows安全提示,允许JetBrains IntellJ安装程序继续运行,正如我在之前的成功更新中看到的那样.我不确定以前的更新有什么变化,但显然更新过程没有成功尝试访问没有适当权限的文件.通过上述过程将Android Studio升级为管理员修复了该问题.

如上面的问题所述,从0.5.2到0.5.3的更新似乎不再出现此问题.

编辑

为了解决我在Android 0.6.0到Android 0.6.1更新时遇到的下一个错误,我关闭了Studio,然后重新启动它,让它隔夜(更巧合而不是设计).当我早上回到机器并运行更新时,它成功了.因此,似乎存在某种长时间运行的进程在某些条件下阻止更新(可能在启动后立即 - 可能是Gradle构建进程?).@Daniel Wilson在下面的回答也适用于这种情况.


Dan*_*son 14

这发生在我从0.6.0更新到0.6.1.我试图在管理模式下打开AS,其他所有应用程序都关闭但更新仍然失败了.我也尝试删除Temp文件夹.

最后我注意到在任务管理器关闭所有内容时,由于某种原因,我仍然有一个相当大的java.exe仍然在后台运行.

我所做的是在管理员模式下打开AS,运行更新并让它失败,声称文件被锁定/访问被拒绝或类似的东西.打开任务管理器,我注意到有2个java.exe进程在运行.对我来说,较小的(约200k)是AS更新器实用程序本身.但是如果我杀死了较大的那个(大约600k)并且重试了,那么更新就没有问题了.


CJB*_*JBS 8

不要以管理员身份重新安装!

虽然在管理模式下运行可能会使更新生效,但它也可能会影响在添加和/或更新的任何文件上设置的权限,以便Android Studio中使用此类文件的未来操作需要提升(管理员)访问权限好好工作.

这样做会导致许多操作无法正常工作,除非Android Studio已在提升模式下运行.

相反,处理文件锁定,然后再试一次:

尝试杀死所有java.exe实例(在任务管理器或进程资源管理器中),然后重新尝试更新,但以管理员身份运行.

每次我使用Process Explorer(在Windows上)检查哪个应用程序锁定了其中一个阻止Android Studio更新的文件时,它始终是Java.

什么对我有用(在Windows上):

  1. 下载Process Explorer,并终止java.exe的所有实例:在Process Explorer中,按Process列排序并找到java.exe实例,按下Del突出显示的行.(另请注意,例如jsch.agentproxy.usocket-nc.jar,可以通过按Ctl+ F,然后输入文件名来检查阻止更新的文件)
  2. 如果更新过程未自动恢复,请通过拖动目标图标将其终止 在此输入图像描述到更新过程'窗口 - 这将在Process Explorer的Process窗口中找到它 - 然后按Del以删除该过程
  3. 重新运行Android Studio(从开始菜单),然后重新启动更新过程.