如何确保为应用程序连接网络驱动器?

时间:2012-01-16 05:12:54

标签: windows ms-access network-drive

我有一个安装在小型办公环境中的桌面Windows应用程序。

应用程序使用.MDB数据库文件作为其数据库,存储在网络驱动器上。

配置文件使用字母驱动器指定服务器上.MDB文件的路径:例如。 f:\data\db.mdb

应用程序在启动时需要访问此数据库文件。应用程序启动时,如何确保网络驱动器已连接并可访问?

有时Windows不会重新连接网络驱动器,连接它们的唯一方法是在“我的电脑”中双击它们,即使在映射驱动器时勾选“登录时重新连接”也是如此。

解决方案是使用\\machine_name\share代替驱动器号吗?

5 个答案:

答案 0 :(得分:5)

您应该使用UNC路径,因为不是每个人都会将您的驱动器映射到同一个字母。

确定UNC路径

首先,我将使用以下技术之一确定F:\data\db.mdb本地计算机上存在的文件的UNC路径:

基本上,您查看Windows资源管理器列出网络映射驱动器的方式,然后使用它来推断UNC路径。

使用WMI检查可用性

假设驱动器实际映射到计划使用该应用程序的每台本地计算机上,请使用Win32_MappedLogicalDisk class确定映射网络驱动器的可用性。

我有一些示例代码here,可以调整以确定给定的网络驱动器是否可用(向下滚动到映射的驱动器信息部分)。您检查.ProviderName以匹配UNC路径,以便知道哪个是正确的驱动器,然后检查.Availability的值以确定是否可以访问映射的网络驱动器。

答案 1 :(得分:3)

你问,“解决方案是使用\ machine_name \ share而不是驱动器号吗?”

我想,是的,它可能是。 UNC路径避免了2个问题:

  1. 分享未连接到驱动器号
  2. 共享已连接,但已映射到与预期不同的驱动器号
  3. 未知的是,您的应用程序中的任何内容是否为MDB创建了UNC路径,无论是并发症还是平坦的交易破坏者。

答案 2 :(得分:1)

您绝对应该放弃网络驱动器映射的可能性:

  • 使用此技术会强制您使用数据库操作“物理”每台计算机,您必须在其中为网络驱动器分配一个字母。
  • 每个计算机用户都可以轻松更改
  • 任何与网络的断开连接都可能会强制用户“手动”重新连接到磁盘驱动器

虽然您在域名中,但我不建议您使用名称,因为计算机由于多种原因,可能并不总是在网络上“轻松”找到它,特别是当其IP定期更改时。

您绝对应该找到一种为磁盘分配固定IP的方法:它是您可以考虑的最稳定,最永久的解决方案。请您的域管理员为您安排。

然后可以非常轻松地测试网络磁盘的存在。有多种解决方案,包括尝试直接打开mdb文件。您还可以测试文件的存在(通过我认为的文件对象),甚至可以使用您可以从代码中启动的任何外部程序或Windows API。请谷歌'VB测试IP'或类似的东西,以方便您找到解决方案。

编辑:Windows甚至提出用一些VB代码模拟ping的建议。检查here

EDIT2:我在我的一个应用程序中找到了这个VBA代码,它可以快速检查网络上某个文件是否存在(并且可以访问)。它基本上设置为测试是否有新版本的用户界面。

Function fileIsAvailable(x_nom As Variant) As Boolean

On Error GoTo ERREUR
Application.Screen.MousePointer = 11

Dim fso as object
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(x_nom) Then
    fileIsAvailable = False
Else
    fileIsAvailable = True
End If
Set fso = Nothing

Application.Screen.MousePointer = 0
On Error GoTo 0
Exit Function

ERREUR:
Application.Screen.MousePointer = 0
debug.print Err.Number, Err.description
End Function 

您可以通过提供文件的网络名称轻松调用此功能,例如:

if fileIsAvailable("\\192.168.1.110\myFileName.mdb") then ...

答案 3 :(得分:0)

您没有明确说明您的应用程序是什么写入的,但是在您第一次尝试连接数据库之前,可能是在启动画面或某种性质的情况下,请检查f:\ data \ db。 MDB  存在。

答案 4 :(得分:0)

确保在启动应用程序之前运行此脚本:

net use f: \\machine_name\share /user:[username] [password] /persistent:yes

这将在您指定的字母上映射共享驱动器!