映射驱动器标签 windows 7 期
Mapped drivelabel windows 7 issue
我对 LABEL 的一个问题感到抓狂,该问题将驱动器映射到 windows windows 7 OS。情景;
我们需要在用户登录机器后立即映射驱动器。这似乎适用于其他 os 版本,除了 windows 7。 windows 7 的步骤;
- EXE(我们制作的 c#)在 windows 7
中启动
- EXE 已正确映射驱动器
- 用户注销
- 重新登录
- exe 再次尝试映射驱动器(它注册为启动 exe)
- 映射的驱动器标签变为 "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 机器上使用了类似的解决方法。
我对 LABEL 的一个问题感到抓狂,该问题将驱动器映射到 windows windows 7 OS。情景;
我们需要在用户登录机器后立即映射驱动器。这似乎适用于其他 os 版本,除了 windows 7。 windows 7 的步骤;
- EXE(我们制作的 c#)在 windows 7 中启动
- EXE 已正确映射驱动器
- 用户注销
- 重新登录
- exe 再次尝试映射驱动器(它注册为启动 exe)
- 映射的驱动器标签变为 "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 机器上使用了类似的解决方法。