2

我正在尝试编写一个测试,在它的固定装置设置中,它备份一个文件并删除原始文件,在没有原始文件的情况下运行测试,然后在拆解中,从备份中恢复原始文件。该文件位于我的 %ProgramFiles% 文件夹中。我在 fileInfo.Delete() 语句上收到 UnauthorizedAccessException。从 Resharper 测试运行器未运行的同一台机器上的另一个测试项目中删除此文件没有问题。

我无法将文件移动到其他地方——它是 ssapi.dll,一个为 Visual SourceSafe 安装的 dll。(是的,我在单元测试中做一些侵入性的事情。)

两种方式都是同一个用户(我)——我通过任务管理器检查了它。我的用户帐户是本地管理员组的成员。还有哪些其他因素决定了我对文件做某事的“授权”?

已解决:虽然它没有回答我最初的问题(我仍然想知道答案),但我找到了一种用于测试目的的解决方法,使用 System.Security.Permissions 框架,对 FileIOPermissionAccess 执行需求。读入需要该文件(用于互操作调用)的应用程序(非测试)代码,并在该代码的测试中读取相同的拒绝,这需要该文件不存在的场景。这现在应该可以工作(我喜欢了解一些关于 System.Security.Permissions 命名空间的知识)!

4

5 回答 5

1

Not really a solution, but I'd consider fixing this problem from a different angle.

You could perhaps consider changing the directory to %AppData% (you might need to make this change for you main application also).

It might solve your problem and also will see you well when you move to Vista, since UAC could stop you (or the application user) from using the %ProgramFiles% directory.

于 2008-09-19T13:42:51.973 回答
0

您可以通过授予您的用户帐户对该文件夹的完全访问权限来解决此问题。

导航到 Windows 资源管理器中的文件夹。右键单击该文件夹并选择属性。选择安全选项卡,然后选择编辑按钮,然后为自己添加完全控制权。是的 - 我认为这是一个潜在的安全问题,但您必须更改该目录中的文件,并且您似乎知道自己在做什么,所以它应该可以工作。

于 2008-09-19T15:36:14.683 回答
0

ReSharper 可能将其 Test Runner 作为一个单独的进程运行,并且该单独的进程没有使用您的 Windows 身份,而是使用另一个具有较低权限的身份。

您可能能够验证此打开任务管理器并检查所有用户的显示进程。

于 2008-09-19T06:47:35.540 回答
0

您可以激活文件的审核,并检查事件日志中的错误消息。请注意,您必须在两个地方打开审核,一次在本地安全策略/本地策略/审核策略下,一次在文件本身上。这不会解决问题,但至少有助于诊断问题。

于 2008-10-15T07:01:04.667 回答
0

您是否在打开 UAC 的情况下运行 Vista 或 Server 2008?如果是,这可能是原因 - 测试运行程序进程可能未处于“提升”模式。

于 2008-10-16T19:33:18.190 回答