【发布时间】:2013-12-01 15:58:22
【问题描述】:
我尝试通过 kernel32.dll 导入和函数 SetComputerName 更改主机名。 SetComputerName function
主类:
namespace Castell
{
class Program
{
private static string hostname { get; set; }
setHostname();
private static void setHostname()
{
hostname = "TEST123456789";
int errorcode = ImportDLL.SetComputerName(hostname);
Console.WriteLine(Marshal.GetLastWin32Error());
}
}
}
导入类:
namespace Castell
{
class ImportDLL
{
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern int SetComputerName(string hostname);
}
}
Marshal.GetLastWin32Error() 的结果是“6”。所以这意味着: ERROR_INVALID_HANDLE 6 (0x6) 句柄无效。
不知道手柄有什么问题。
【问题讨论】:
-
ms 描述为“句柄无效。”
-
SetComputerName():“如果函数成功,返回值是一个非零值”。GetLastWin32Error()的结果不必与您的SetComputerName()调用相关。函数调用返回了什么? -
当我设置SetLastError = true时,我以为win32错误中显示的最新错误?我在这里读到了一些问题,GetLastError 函数不是最好的。
-
再次:
SetComputerName()调用返回了什么? -
现在可以了,问题出在函数定义上。现在我更改了 NetBios 名称,但我还想重命名主机名。更改注册表项 tcp/ip 的唯一方法是什么?
标签: c# runtime-error rename netbios