我正在尝试编写一个测试,在它的fixtures安装程序中,它备份文件并删除原始文件,在没有原始文件的情况下运行测试,然后在拆解时,从备份中恢复原始文件。该文件位于我的%ProgramFiles%文件夹中。我在fileInfo.Delete()语句中得到一个UnauthorizedAccessException。从没有从Resharper Test Runner运行的同一台机器上的另一个测试项目中删除此文件没有问题。
我无法将文件移动到其他地方 - 它是ssapi.dll,Visual SourceSafe的已安装dll。 (是的,我在单元测试中做了一些侵入性的事情。)
两种方式都是同一个用户(我) - 我通过任务管理器检查过它。我的用户帐户是本地Administrators组的成员。还有哪些其他因素决定了我对文件做某事的“授权”?
已解决:虽然它没有回答我原来的问题(我仍然想知道答案),但我找到了一个解决方法,用于我的测试目的,使用System.Security.Permissions framewok,做一个需求对于需要该文件(用于Interop调用)的app(非测试)代码中的FileIOPermissionAccess.Read,以及在该代码的测试中对该代码的拒绝,这需要该文件不存在的场景。这应该适用于现在(我喜欢了解System.Security.Permissions命名空间)!
答案 0 :(得分:1)
不是真正的解决方案,但我会考虑从不同的角度解决这个问题。
您可以考虑将目录更改为%AppData%(您可能还需要为主应用程序进行此更改)。
它可能会解决您的问题,并且当您迁移到Vista时也会很好地看到您,因为UAC可能会阻止您(或应用程序用户)使用%ProgramFiles%目录。
答案 1 :(得分:0)
ReSharper可能将其Test Runner作为一个单独的进程运行,并且该单独进程不使用您的Windows身份,而是另一个具有较低权限的进程。
您可以验证此打开任务管理器并检查显示所有用户的进程。
答案 2 :(得分:0)
您可以通过为您的用户帐户授予对该文件夹的完全访问权限来解决此问题。
导航到Windows资源管理器中的文件夹。右键单击该文件夹,然后选择属性。选择安全选项卡,然后选择编辑按钮,并为自己添加完整控件。是的 - 我认为这是一个潜在的安全问题,但您必须更改该目录中的文件,而您似乎知道自己在做什么,所以它应该有效。
答案 3 :(得分:0)
您可以激活文件的审核,并检查事件日志中的错误消息。请注意,您必须在两个位置启用审核,一次在本地安全策略/本地策略/审核策略下,一次在文件本身上。 这不会解决问题,但至少可以帮助诊断问题。
答案 4 :(得分:0)
您是否在启用UAC的情况下运行Vista或Server 2008?如果是,这可能是原因 - 测试运行器进程可能不处于“提升”模式。