Installation 调用目录。在安装项目中存在(“\\SERVER\SHARE\”)

Installation 调用目录。在安装项目中存在(“\\SERVER\SHARE\”),installation,.net,Installation,.net,我有一个.NET安装项目,其中添加了自定义安装程序操作。在安装过程中,用户必须提供文件服务器上共享的路径(通常是UNC路径)。我尝试在继续之前进行一些验证,以确保目录存在,例如: if (!Directory.Exists(serverDirectory)) { throw new InstallException("Specified path does not exist or ..."); } 非常普通——在控制台应用程序中,Directory.Exists()代码按预期工

我有一个.NET安装项目,其中添加了自定义安装程序操作。在安装过程中,用户必须提供文件服务器上共享的路径(通常是UNC路径)。我尝试在继续之前进行一些验证,以确保目录存在,例如:

if (!Directory.Exists(serverDirectory)) { 
    throw new InstallException("Specified path does not exist or ..."); 
} 
非常普通——在控制台应用程序中,Directory.Exists()代码按预期工作。但是,在MSI的上下文中,它不是。具体来说,在使用网络资源时,对Directory.Exists的调用总是失败。目录.Exists的文档表明:

Exists方法不执行网络身份验证。如果未经预验证就查询现有网络共享,Exists方法将返回false。

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

如何检查网络路径的存在?使用文档语言--如何在调用之前进行预验证?用户以管理员身份安装,并且在Windows资源管理器中浏览到该路径会成功,因此这不是用户的权限,而是缺少代码检查


我是否创建了一个不必要的关注点--我是否应该忽略这个,并在稍后尝试使用网络资源时抛出异常。。。这在很大程度上是相同的严重失败,对吧?

这不仅仅是存在:您还需要检查权限,并担心在您检查和实际使用该值之间,如果权限发生变化会发生什么

因此,正常的机制是假设一切正常。相反,当假设被证明是错误的时候,将您的开发工作投入到处理异常上,因为您无论如何都需要能够优雅地做到这一点

对于这种情况,您可以通过立即在相关目录中创建一个小的占位符文件,并在该文件上保持锁定,直到完全完成文件夹的操作,从而改进这种情况。这将允许您提供更好的反馈,因为您在尝试创建文件时会立即出现错误。它还有助于确保文件夹保持可访问性,因为在windows下,只要您锁定该文件,至少用户将很难删除或显著更改文件夹