2017-04-07 57 views
0

这是我的用例: 我需要开发一个excel VSTO加载项,该插件可以防止用户访问excel文件,除非安装了加载项。该加载项基本认证当前用户,如果成功,它将授予他们访问文件的权限。基本上我需要一种方法来保护使用我自己的身份验证(而不是Microsoft提供的内置密码保护)的文件,这是为什么?因为我需要能够撤消对该文件的访问,并且本地密码会阻止我进行此操作所以)强制Excel文件与VSTO插件关联

我知道如何编写外接,我不知道的是,我如何强制文件与该插件关联?我尝试使用自定义属性,但这是非常可以破解的。基本上,我会有一个自定义属性,说:“使用这个加载项”,但一个有知识的用户可以进入高级属性,只需删除它。

回答

0

我的建议是你使用COM加载项,因为它们没有代码分配给用户,并不能轻易砍死。使用.XLA或.XLAM文件的简单加载项只是受密码保护的VBA项目,可以被黑客入侵。现在

,为您的工作簿,我建议你加密和混排的所有数据,并使用你的COM加载解密你的数据和使用功能,防止保存工作簿未加密。您只需重写Workbook_OnSave方法即可对保存进行加密。同时禁用单元格值的复制。

对于这部分,我不知道这是否可行,但是您需要覆盖用户对VBA编辑器的访问权限,以便它们无法绕过您的加载项保护并禁用对选项菜单的访问禁用加载项。这可以通过覆盖Excels快捷键和隐藏菜单栏来实现。

再次,对于最后一部分,我不知道是否真的有可能限制用户访问VBA编辑器。我认为这与通过重写ALT + F11快捷键限制对Add-in控件的访问非常相似,并且只是隐藏了开发者标签。

那么这是我的两美分,祝你好运!

+0

感谢您的快速回复。我的主要问题是,我如何使用我的加载项来制作特定文件,或者知道它需要它?我的加载项如何知道哪些文件需要它?你懂我的意思吗? –

+0

好吧,您可以重写Workbooks.open方法,以检查加载项是否处于活动状态。如果没有 - 不要解密数据并提示用户使用加载项。如果存在加载项,则继续进行身份验证 –

+0

事实证明,如果没有密码,则无法加密文件。我不想设置密码,因为我不想让用户被提示,并且我不能以编程方式通过它(除非我做一些hacky SendKeys命令,它的工作时间是一半)。相反,我编写了一个与自定义扩展相关的程序,它代表了一个加密的excel文件。当用户打开它时,它会被解密回Excel文件,然后重写WorkbookSave和Open方法,并在用户完成时将其加密。它不是防弹的,但它现在会做... –