小编Dan*_*Dan的帖子

如何以编程方式更改映射驱动器的标签?

我正在编写一个使用WNetAddConnection2 API 映射网络驱动器的软件.万一它是相关的,这是一个WebDAV驱动器,而不是一个普通的SMB共享.

驱动器采用我想要更改的默认名称.

网上的一些答案建议使用System.IO.DriveType,例如:

DriveInfo[] allDrives = DriveInfo.GetDrives();

foreach (var drive in allDrives)
{
    if (drive.DriveType == DriveType.Network && drive.Name.StartsWith("Z:"))
    {
        drive.VolumeLabel = "DriveInfo";
    }
}
Run Code Online (Sandbox Code Playgroud)

这明确地不适用于网络驱动器,并且由MSDN支持,其中声明UnauthorizedAccessException将抛出异常.

其次,我尝试使用shell方法:

Shell32.Shell shell = new Shell32.Shell();
((Shell32.Folder2) shell.NameSpace("Z:")).Self.Name = "Shell";
Run Code Online (Sandbox Code Playgroud)

代码执行时没有错误,但不重命名驱动器.这就是它变得奇怪的地方,我找到了这些东西写入的注册表路径:

HKEY_CURRENT_USER\ Software\ Microsoft\ Windows\ CurrentVersion\ Explorer\ MountPoints2

上面的代码创建了一个看起来正确的密钥,并添加了一个_LabelFromReg带有"Shell" 的REG_SZ作为值.但是,这不会反映在资源管理器或其他任何地方.

然后我通过右键单击并选择"重命名"手动重命名映射驱动器.

这样做会创建一个新的,稍微不同的键,MountPoints2其中完美地工作.

所以,上面的shell代码并没有完全正确地解决路径 - 我还能尝试其他的东西吗?上面让我相信Windows必须在内部使用不同的API调用来重命名驱动器?


更新1

这肯定与这些是WebDAV驱动器有关.必须进行一些引擎盖下的处理.

我的软件地图https://myurl.com@ssl/stuff/destination/docs.使用该Net Use命令可以看到确切的路径.这是shell上面的代码添加到注册表并尝试命名的路径.

但是,在Windows资源管理器中将鼠标悬停在驱动器上会让我https://myurl.com@ssl/anotherfolder/stuff/destination和在Explorer中手动重命名的路径添加到注册表中.

到目前为止,我已经设法弄清楚如何从WMI(Win32_LogicalDisk - > ProviderName)调用返回第二个路径,但我真的想避免手动注册表项.

c# windows

13
推荐指数
1
解决办法
1574
查看次数

检索特定的Active Directory属性

我正在使用内置的.NET System.DirectoryServices.ActiveDirectory来访问Active Directory域控制器.

我试图从服务器枚举用户属性的集合 - 而不是值,而是任何用户的可修改设置列表.

从本质上讲,这是Active Directory中"属性编辑器"中可写属性的镜像:

ADUC用户属性

我试图使用以下代码获取此数据:

    ActiveDirectorySchema currSchema = ActiveDirectorySchema.GetSchema(directoryContext);

    ActiveDirectorySchemaClass userSchema = currSchema.FindClass("user");

    ReadOnlyActiveDirectorySchemaPropertyCollection userProperties = userSchema.GetAllProperties();
Run Code Online (Sandbox Code Playgroud)

但这会返回很多属性,而这些属性根本就不在这个对话中,但我不知道是什么让这些属性变得独特/特殊.

我也试过FindClass("人");

有没有办法实现这一目标?

更新

根据要求,如果我要求上述内容,我会得到以下内容:

使用FindClass("人")

cn    
instanceType      
nTSecurityDescriptor      
objectCategory    
objectClass   
adminDescription      
adminDisplayName      
allowedAttributes     
allowedAttributesEffective    
allowedChildClasses   
allowedChildClassesEffective      
attributeCertificateAttribute     
bridgeheadServerListBL    
canonicalName     
createTimeStamp   
description   
directReports     
displayName   
displayNamePrintable      
distinguishedName     
dSASignature      
dSCorePropagationData     
extensionName     
flags     
fromEntry     
frsComputerReferenceBL    
fRSMemberReferenceBL      
fSMORoleOwner     
isCriticalSystemObject    
isDeleted     
isPrivilegeHolder     
isRecycled    
lastKnownParent   
managedObjects    
masteredBy    
memberOf      
modifyTimeStamp   
mS-DS-ConsistencyChildCount   
mS-DS-ConsistencyGuid     
msCOM-PartitionSetLink    
msCOM-UserLink    
msDFSR-ComputerReferenceBL    
msDFSR-MemberReferenceBL      
msDS-Approx-Immed-Subordinates    
msDS-AuthenticatedToAccountlist   
msDS-EnabledFeatureBL     
msDS-HostServiceAccountBL     
msDS-IsDomainFor      
msDS-IsFullReplicaFor     
msDS-IsPartialReplicaFor      
msDS-KrbTgtLinkBl …
Run Code Online (Sandbox Code Playgroud)

c# active-directory

8
推荐指数
1
解决办法
9053
查看次数

WebBrowser控件导致整个应用程序无响应

我有一个带有嵌入式Web浏览器的C#.NET 3.5应用程序.浏览器旨在指向远程站点(而不是本地的任何东西).一切正常,但当页面响应缓慢时,这会导致整个应用程序无响应,直到页面加载完毕.

我不介意浏览器在做它的事情时没有反应,但是应用程序也远非理想.

有没有好办法防止这种情况发生?在单独的线程上运行WebBrowser是否有益 - 这有点超出我的技能组合,我不认为WebBrowser控件真的喜欢多线程?但如果需要,我可以学习.

c# browser

5
推荐指数
1
解决办法
3428
查看次数

以编程方式,该应用程序如何检测程序是否已准备好输入

我需要构建一个小型C#应用程序来测量可定义应用程序的启动时间.我找到了这个免费工具:

http://www.passmark.com/products/apptimer.htm

这正是我需要的,但我被要求创建一个更具公司特定的内部版本,因​​为我们需要数据库日志记录和其他一些东西.

我理解如何复制除"输入空闲"之外的所有功能.我试图搜索这个术语,但我没有找到任何有用的参考.任何人都可以指出我正确的方向检查应用程序"输入空闲"状态?

.net c# windows

3
推荐指数
2
解决办法
1310
查看次数

通过搜索"名称"来检索元素"值"

我很肯定这是一个简单的问题,但我无法弄清楚.

我正在将一个XML文件下载到C#中的字符串,它包含以下格式的项目:

<attribute name="Make" value="Volvo" />
<attribute name="Color" value="Blue" />
<attribute name="Damage" value="Rear scratched" />
<attribute name="Damage" value="Left hand side dented" />
Run Code Online (Sandbox Code Playgroud)

而我想要做的就是将整个文档中的"Damage"的所有值(无论它们落在何处)都放入一个数组中.我一直在玩XmlDocument/XmlNodeList,但我无法弄清楚如何使这个工作.

我很想用RegEx来做这件事,但感觉非常非常脏.

c# xml

2
推荐指数
1
解决办法
311
查看次数

标签 统计

c# ×5

windows ×2

.net ×1

active-directory ×1

browser ×1

xml ×1