繁体   English   中英

从网络更新本地 MSOffice 加载项期间的权限被拒绝错误

[英]Permission Denied Error During Update of a Local MSOffice Add-In from Network

我正在尝试在 PowerPoint 2003 中编写一个程序,允许自动更新已安装的加载项。 一般流程如下:

  1. 卸载加载项

    For Each objAddIn In Application.AddIns If UCase(objAddIn.Name) = UCase(AddInName) Then With objAddIn .Registered = msoFalse .AutoLoad = msoFalse .Loaded = msoFalse End With End If Next

  2. 从本地加载项目录中删除文件

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    If objFSO.FileExists(FileName) Then Set objFSO = Nothing Kill FileName End If

  3. 从网络位置复制文件

  4. 安装更新的加载项

到达第 2 步后,任何使用 FileSystemObject 或直接Kill删除卸载后文件的尝试都不可避免地会生成Run-time error '70': Permission denied 如果我点击调试然后播放,它会运行,好像从来没有问题一样。

旁注:我意识到我可以使用 FSO 覆盖本地文件,但这给了我相同的运行时错误。

我猜这个问题与正在使用的文件的某些方面有关,但我不知道如何“释放”旧的加载项,以便可以删除基础文件。

有没有人有洞察力可以提供帮助?

您需要先将其从 Addins Collection 中删除,然后才能物理删除。 把这个放在你的End With

Application.AddIns.Remove objAddIn.Name

参考可用于检查锁定文件的 VBA 函数的知识库文章在这里。 http://support.microsoft.com/kb/209189

它包含一个简单的函数,您可以将其添加到 VBA 中以检查文件是否未锁定,并使用 Otaku 在其答案中引用的相同代码示例。

我要做的是...

替换代码中的 Kill Filename 行

If FileLocked(Filename) = True Then  
SetAttr Filename, vbNormal  
Kill Filename  
End If

*其中 FileLocked 是 KB209189 中提到的自定义函数
**如果这不起作用,请回复,我们还可以考虑将上面的 Kill 语句替换为执行相同操作的较低级别的 Win32 函数(但可能更彻底)。 :D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM