c# - 如何以编程方式更改机器的工作组?

标签 c# .net

有什么方法可以通过编程方式更改机器(XP、Vista 和 Win 7)所属的工作组(最好使用 .NET 语言)?我找到了代码来帮助确定一台机器属于哪个工作组,但在某些情况下我可能需要更改它。

这听起来有点奇怪,但我正在考虑为我们的用户构建一个自动恢复安装(在 100 多个不同站点的 2 到 10 台机器上,每台机器都有自己的“服务器”)。一个常见的场景是,“嘿,我的服务器死机了。你能让我们的销售点软件在另一台机器上运行并使其成为我们的临时/新服务器吗?”。我最终不得不手动配置他们的机器名称(将其重命名为旧服务器的名称 - 我已经有这方面的代码),然后仔细检查工作组以确保它对网络上的其他机器可见。我希望能够尽可能地实现自动化。

(编辑)

根据发布的信息,我进行了更多搜索,发现我实际上可以直接执行此操作,而无需运行 EXE(并不是说这样做有什么大不了的)。

using System;
using System.Management;

//为简洁起见删除了类内容

ManagementObject manage = new ManagementObject(string.Format("Win32_ComputerSystem.Name='{0}'", Environment.MachineName));
object[] args = { "WorkgroupName", null, null, null };
manage.InvokeMethod("JoinDomainOrWorkgroup", args);

最佳答案

看起来您必须调用 SetComputerNameEx() API。可以在 MSDN 上找到完成它的 C# 代码示例。或 pinvoke.net .

可以找到 SetComputerNameEx 函数的文档 here .

您还可以使用 netdom.exe Windows 支持工具中的实用程序。您将从您的代码中调用该 EXE 并将适当的参数传递给它 - 在这种情况下,您似乎想要使用/JOINWORKGROUP 参数。

关于c# - 如何以编程方式更改机器的工作组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1194387/

相关文章:

c# - WCF 4.0、.NET 2.0 客户端和 .NET 类型

c# - .NET 读取 .lnk 文件的二进制内容

.net - 为什么 WinRT 框架程序集与其(不同的)非 WinRT 对应项具有相同的完全限定名称?

C# 将 3D 矩阵展平/扩展为锯齿状数组

c# - 在 Entity Framework ADO.NET 实体数据模型中导入 SQL Server 函数时出错

c# - 有什么优化此代码的建议吗?

c# - 解析 Visual Studio 解决方案文件

c# - 找不到类型或命名空间(但应该是!)

c# - 在 C# 中处理跨线程事件的最佳方法是什么

c# - 配置单例并将其公开给 MEF/PRISM 应用程序中的所有模块