C# 如何将光驱盘符从 D: 更改为 Z:

2024-01-31

我正在尝试编写一种方法,将 CD ROM 驱动器从字母 D 更改为字母 Z,但对 WMI 没有任何运气。还有其他方法可以使用 C# 来做到这一点吗?

public void setVolCDROM()
{
    SelectQuery queryCDROM = 
        new SelectQuery("SELECT * FROM Win32_cdromdrive");
    ManagementObjectSearcher searcherCDROM = 
        new ManagementObjectSearcher(queryCDROM);
    foreach(ManagementObject cdromLetter in searcherCDROM.Get())
    {
        MessageBox.Show(cdromLetter["Drive"].ToString() + "\n"
            + cdromLetter["Manufacturer"].ToString());
        if (cdromLetter["Drive"].ToString() == "D:")
        {
            cdromLetter["Drive"] = "Z:";                        
            cdromLetter.Put();
        }
    }
}

我不知道WMI,但你可以用winapi更改驱动器盘符,这里有一个example http://msdn.microsoft.com/en-us/library/aa364014%28VS.85%29.aspx我将(只是您需要的部分)移植到 C#

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool GetVolumeNameForVolumeMountPoint(string
    lpszVolumeMountPoint, [Out] StringBuilder lpszVolumeName,
    uint cchBufferLength);

[DllImport("kernel32.dll")]
static extern bool DeleteVolumeMountPoint(string lpszVolumeMountPoint);

[DllImport("kernel32.dll")]
static extern bool SetVolumeMountPoint(string lpszVolumeMountPoint,
    string lpszVolumeName);

const int MAX_PATH = 260;

private void ChangeDriveLetter()
{
    StringBuilder volume = new StringBuilder(MAX_PATH);
    if (!GetVolumeNameForVolumeMountPoint(@"D:\", volume, (uint)MAX_PATH))
        Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());

    if (!DeleteVolumeMountPoint(@"D:\"))
        Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());

    if (!SetVolumeMountPoint(@"Z:\", volume.ToString()))
        Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
}

运行此代码时要小心,您必须先删除驱动器安装点,然后再将其分配给新的盘符,这可能会导致问题,从原始代码来看:

/*****************************************************************
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING  

   This program will change drive letter assignments, and the    
   changes persist through reboots. Do not remove drive letters  
   of your hard disks if you do not have this program on floppy  
   disk or you might not be able to access your hard disks again!
*****************************************************************/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 如何将光驱盘符从 D: 更改为 Z: 的相关文章

随机推荐

  • JavaFX 代码编辑器,带有 Java 代码内容荧光笔

    我想在 JavaFX 中编写一个文本编辑器 其作用类似于 Eclipse Netbeans IDE 以突出显示 Java 代码 任何人都可以建议如何实现它 或者任何人以前已经这样做过 Thanks 据我所知 没有用于代码突出显示 编辑的纯
  • 长时间运行的进程中 DbContext 的生命周期[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设我有一个长时间运行的进程 例如 Windows 服务 需要从多个线程访问数据库 DbContext 不是线程安全的 而且最好不要长
  • 我如何编码 SplashScreenActivity.kt 因为我的不起作用[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想向我的应用程序添加启动屏幕 因此我创建了一个名为 SplashScreen 的活动 我将此代码添加到 SplashScreen
  • 了解python中的Queue模块(如何运行它)

    最近引入了关于延迟处理能力以及实现 先进先出 等的队列设计 查看文档 试图获取示例队列 以了解如何在我自己的设计 程序中实现它 但我在运行这段代码时遇到了问题 import queue def worker while True item
  • 消失的存储过程

    所以 不确定发生了什么 但我有存储过程 它在 SQL 2k 中不断从我的数据库中消失 我可以再次添加它 然后尝试从我的网络应用程序执行它 但出现异常 提示无法找到存储过程 然后我会回到管理层并刷新 然后它又消失了 这是存储过程的配置 set
  • Android 树视图

    我知道有可扩展列表视图 http developer android com reference android widget ExpandableListView html但最多只支持2级 我需要一个真正的树视图垂直列表 至少有大约 5
  • 如何在树枝模板中输出胡子模板?

    我需要使用 symfony2 将胡子模板添加到 Twig 模板中 有人为 django 创建了一个 逐字 模板标签 我正在为 twig 寻找一个相应的模板标签 以防止它解析 Mustache 元素 有人能指出我正确的方向吗 Thanks 我
  • 为 ggplot2 生成亮色和暗色对

    brewer pal n 8 name Paired 最多可以创建八个颜色对 但其中只有少数颜色适合打印 有没有更灵活的函数可以生成深色吊坠 应该是深色的 在黑暗中看起来像相同的颜色 可打印 很容易与亮色区分开来 有没有 colorbrew
  • 设计基于权限的安全模型

    我在开发一个 vb net winforms 应用程序 目前我们使用简单的角色来确保安全 我们根据当前用户是否具有所需的角色来启用 禁用特定控件 我们已经到了这样的地步 这已经不够精细了 我们的应用程序基于我们称之为站点的不同物理位置 用户
  • 有什么方法可以找出 Angular 2 中触发变化检测的因素吗?

    我最近发布了一个新组件 它似乎每秒多次触发更改检测 some debugging code ngDoCheck console log DO CHECK new Date toLocaleTimeString Results 我还没有弄清楚
  • 使用 Redux 时如何声明 ReactJS 默认 props?

    在 React 中声明默认 props 的正确方法是什么 这样当我在使用 redux 异步分配的 props 上调用 map 时 我就不会收到未定义的错误 现在 使用以下语法 在尝试分配 trans filter 时出现错误 因为数据在渲染
  • 在非对象上调用成员函数 count() (Laravel 5)

    我有一个项目列表 我可以单击它 它 需要 显示项目名称以及项目任务列表 ToDo 应用程序 但是当我单击某个项目时 我收到此错误 H2 项目名称将显示 h2 gt project gt name if project gt tasks gt
  • Android 无法保留嵌套在其他片段中的片段

    我的应用程序有问题 我尝试在另一个Fragment中添加三个Fragment 然后 Eclipse 显示 java lang IllegalStateException 无法保留嵌套在其他片段中的片段 这是我在 childFragments
  • 在常量表达式中调用“static constexpr”函数是...错误? [复制]

    这个问题在这里已经有答案了 我有以下代码 class MyClass static constexpr bool foo return true void bar noexcept foo 我希望从那时起foo is a static co
  • OracleConnection.Open 抛出 ORA-12541 TNS 无侦听器

    所以我通过 C 连接到外部服务器 我刚刚安装甲骨文11g我的机器上的客户端从这里 http www oracle com technetwork database windows downloads index 090165 html ht
  • 在 iPhone 上播放 CAF 声音的最简单方法?

    做到这一点有多难 有人告诉我 在 iPhone 上播放音频非常困难 实在不敢相信 但他说玩一个很难 但同时玩两个或三个就很难了 听起来很可怕 对此大家有什么想说的吗 我想要做什么 我有大约 10 个带有小光点 蜂鸣声和按钮按下声音的 CAF
  • 使用 Groovy 修改节点标签的 Jenkins/Hudson CLI API

    有谁知道如何以非手动方式修改 Jenkins Hudson 节点标签 我的意思是 彻底的 API 如该工具提供的 CLI API 当然无需重新启动 Jenkins Hudson 我的猜测是 最好的选择是使用 Groovy 脚本进入 Jenk
  • 在 JUnit 中检查异常的最佳实践是什么?

    我正在尝试编写测试用例 根据我所读到的内容 我的测试从一开始就应该失败 我应该努力让测试通过 但是 我发现自己正在编写测试来检查边界以及它们应该引起的异常 Test expected NegativeArraySizeException c
  • 如何从ABRecordID获取ABRecordRef?

    我已访问地址簿并成功从中提取了记录和必要信息 我也提取了recordid 我的问题是如何使用这个 recordid 来提取记录 我正在使用的代码是 ABRecordID recordId ABAddressBookRef addressBo
  • C# 如何将光驱盘符从 D: 更改为 Z:

    我正在尝试编写一种方法 将 CD ROM 驱动器从字母 D 更改为字母 Z 但对 WMI 没有任何运气 还有其他方法可以使用 C 来做到这一点吗 public void setVolCDROM SelectQuery queryCDROM