映射驱动器标签 windows 7 期

Mapped drivelabel windows 7 issue

我对 LABEL 的一个问题感到抓狂,该问题将驱动器映射到 windows windows 7 OS。情景;

我们需要在用户登录机器后立即映射驱动器。这似乎适用于其他 os 版本,除了 windows 7。 windows 7 的步骤;

  1. EXE(我们制作的 c#)在 windows 7
  2. 中启动
  3. EXE 已正确映射驱动器
  4. 用户注销
  5. 重新登录
  6. exe 再次尝试映射驱动器(它注册为启动 exe)
  7. 映射的驱动器标签变为 "Network Drive"(不确定如何)

我们正在注册表中设置正确的值,如下图所示;

问题在这里;

问题仅在我们注销和登录时出现。如果我们手动启动exe,它工作正常...

我也曾尝试在映射驱动之前删除所有这些注册表,假设它可能是缓存或其他东西,但没有任何帮助..

我们正在使用 zMapDrive 映射驱动器;

//create struct data
structNetResource stNetRes = new structNetResource();
stNetRes.iScope = 2;
stNetRes.iType = RESOURCETYPE_DISK;
stNetRes.iDisplayType = 3;
stNetRes.iUsage = 1;
stNetRes.sRemoteName = ls_ShareName;
stNetRes.sLocalName = ls_Drive;       
//prepare params
int iFlags = 0;
if (lf_SaveCredentials) { iFlags += CONNECT_CMD_SAVECRED; }
if (lf_Persistent) { iFlags += CONNECT_UPDATE_PROFILE; }
if (ls_PromptForCredentials) { iFlags += CONNECT_INTERACTIVE + CONNECT_PROMPT; }
if (psUsername == "") { psUsername = null; }
if (psPassword == "") { psPassword = null; }
//if force, unmap ready for new connection
if (lf_Force) { try { zUnMapDrive(true); } catch { } }
//call and return
int i = WNetAddConnection2A(ref stNetRes, psPassword, psUsername, iFlags);
if (i > 0) { throw new System.ComponentModel.Win32Exception(i); }

也许一个简单的 powershell 脚本,重命名网络驱动器对你有用?然后,您可以在每次用户登录时使用 Task Scheduler 到 运行。

$Rename = New-Object -ComObject Shell.Application
$Net = New-Object -ComObject WScript.Network

# map the drive if the path doesn't exist
If (!(Test-Path Z:))
{
    $Net.MapNetworkDrive("Z:", '\SERVER_ADDRESS\Directory', $false, "user", "password")
}

# change the drive name
$Rename.NameSpace("Z:\").Self.Name = "MyNetDriveLabel"

根据我的经验,Windows 7 中对网络映射驱动器的支持有些问题,因此我在一些 Win7 机器上使用了类似的解决方法。