解決策を見つけることができるかどうかを確認するために、すでにいくつかのグーグルを実行しましたが、これまでのところ、役立つものは何も見つかりませんでした. 私の問題は、タイトルが示すとおりです。レジストリ値を変更して、指定したユーザーとしてリモート マシンにログオンしようとしましたが、デバッグ モードでは正常に動作しますが、解放されません (レジストリ値は同じままです)。管理者として Windows にログインしており、WMI の管理者資格情報も使用しています。どちらの場合も戻り値は "0" で、エラーがないことを意味します。もう 1 つ注意すべき点は、WMI を使用する他のすべての機能がデバッグ バージョンとリリース バージョンの両方で正常に動作することです (つまり、WMI クエリ、WMI のシャットダウン/再起動/ログオフ)。モード。これが私のコードです:
public static bool LogOnAsViaWMI(string computerName, string username, string password, string logonUsername, string logonPW)
{
try
{
// Set connection options
ConnectionOptions options = new ConnectionOptions();
options.EnablePrivileges = true;
options.Username = username;
options.Password = password;
// Connect to machine
ManagementScope scope = new ManagementScope("\\\\" + computerName + "\\root\\CIMV2", options);
scope.Connect();
// Set management class
ManagementPath managementPath = new ManagementPath("StdRegProv");
ManagementClass mc = new ManagementClass(scope, managementPath, null);
// Set registry values
if (!SetRegKeyValue(mc, "AutoAdminLogon", "1") ||
!SetRegKeyValue(mc, "ForceAutoLogon", "1") ||
!SetRegKeyValue(mc, "DefaultUserName", logonUsername) ||
!SetRegKeyValue(mc, "DefaultPassword", logonPW) ||
!SetRegKeyValue(mc, "DefaultDomainName", "MyDomainName"))
{
MessageBox.Show("Failed to set Windows logon registry values");
return false;
}
// Log off to log in as new default
LogOff(computerName, username, password);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return true;
}
private static bool SetRegKeyValue(ManagementClass mc, string valueName, string value)
{
// Set values
ManagementBaseObject inParams = mc.GetMethodParameters("SetStringValue");
inParams["hDefKey"] = HKEY_LOCAL_MACHINE;
inParams["sSubKeyName"] = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon";
inParams["sValueName"] = valueName;
inParams["sValue"] = value;
// Invoke inParams
ManagementBaseObject outParams = mc.InvokeMethod("SetStringValue", inParams, null);
if (outParams["returnValue"].ToString() != "0")
return false;
return true;
}