我有一个.净安装项目而我已经增加一个自定义安装的行动。在建立过程中,用户已经提供途径(这往往是一个UNC路)向一个分享他们的文件服务器。我尝试做一些验证之前进行,以确保该目录存在,因为这样的:

if (!Directory.Exists(serverDirectory)) { 
    throw new InstallException("Specified path does not exist or ..."); 
} 

漂亮的香草-在控制台应用程序, 目录。存在() 代码工作的预期。然而,在上下文的MSI,它没有。具体地说,呼叫 目录。存在 总是失败时使用网络资源。该文件 目录。存在 确实表明 为什么:

所存在的方法不执行网络中的认证。如果你查询现有的网络分享,而不是预先通过身份验证,存在方法将返回错误的。

搜索有带我到其他类似的场景ASP.NET 其中模拟是解决方案。这并不是适用在这里,但它说明了问题。

我怎么可以检查是否存在网络上的路径?把语言的文件--我如何预先进行认证的电话吗?用户安装过程中作为管理员,并浏览到这条道路,在Windows资源管理器的工作成功,所以它没有权限的用户,而是缺乏检查的代码。

我已经创建了一个不必要的关注--我应该忽略这个扔的例外后,当试图使用网络资源中心。它的主要相同的重要失败的,对吗?

有帮助吗?

解决方案

这不只是存在:你需要检查的权限为好,担心如果他们改变您在当您检查,当你实际使用的价值之间的时期会发生什么。

因此正常的机制就是假定一切正常。相反,把你的开发精力投入到处理异常时的假设证明错误的,因为你需要能够做到这一点无论如何优雅

对于这种情况,你或许能够立即产生问题在目录中的小占位符文件,并保存在该文件上的锁,直到你完全的文件夹完成,改善了这一点。这将使你提供一些更好的反馈,因为你会得到一个即时错误试图创建的文件。它还有助于保证该文件夹中的停留的访问,因为windows下至少用户将有一个很难删除或只要显著更改文件夹,你持有锁到该文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top