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

时间:2009-07-28 14:15:02

标签: 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);

1 个答案:

答案 0 :(得分:2)

看起来你必须调用SetComputerNameEx()API。可以在MSDNpinvoke.net上找到完成此操作的C#代码示例。

可以找到SetComputerNameEx函数的文档here

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