2009-07-15 80 views
2

Excel电子表格需要编程访问其Project结构。但是,默认情况下禁用此访问。它可以通过编程来启用,通过在这个片段中写入注册表:是否启用安全保护功能

Set wsh = CreateObject("WScript.Shell") 
'key to modify' 
str1 = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Application.Version & "\Word\Security\AccessVBOM" 
'enable access' 
wsh.RegWrite str1, 1, "REG_DWORD" 
'read the vba project name' 
MsgBox Application.NormalTemplate.VBProject.Name 
'disable access' 
wsh.RegDelete str1 

虽然这是可以做到(和复位)程序,这可能会造成安全问题。

在我的项目中,它试图修改Project结构,如果不能,则会抛出错误。该错误可以被捕获,并且此时它可以运行该代码段以启用访问或向用户显示错误消息以手动启用访问。通过程序启用访问,稍后可以禁用,还是指示用户这样做会更好吗?

回答

1

好吧,有两件事:它是众所周知的,你可以通过注册表修改办公室的安全设置。所以Office通过仅在文件打开时读取设置来绕过这一点。因此,如果您使用代码更改设置,则还需要关闭并重新打开文件以使设置生效。其次篡改用户安全设置将被视为“粗鲁”软件。如果用户想要允许你的代码,他们会。只需提示他们启用设置并重新启动程序。任何过去的事情都会被视为不良行为。
请记住,只是因为你可以,并不意味着你应该:)

+0

我发布了这个问题的最佳做法标签,因为担心写作“粗鲁“软件。你提到的只有在启动时才读取设置的Office可能会导致这种情况 - 它是否在打开文件或打开应用程序时检查注册表? – 2009-07-15 15:05:10

2

在我看来,它可以编程的事实是的一个安全问题。鉴于存在这种简单的机制来覆盖默认的“保护”,您不会通过关闭将用户暴露于更大的风险。无论如何,任何值得他们的盐的病毒作家都会这样做。

也就是说,在您开始工作后关闭它20秒,然后再次打开时,(断开)窗口打开的时间远远少于要求用户关闭它的时间。

我会倾向于要求用户暂时关闭它的权限,然后让该死的确保我再次打开它(因为将它关闭将是一个禁忌)。

+0

+1为建议在关闭之前询问用户 – 2009-07-15 14:59:27