为什么此代码无法在基于 x64 的 Windows 计算机上远程运行

本文关键字:计算机 程运行 运行 Windows 代码 x64 为什么 | 更新日期: 2023-09-27 18:30:55

我有一段C#代码,我用它来在C#中远程注册一个*.tlb文件。我正在使用PsExec(Powershell)和以下命令部署它:

.'PsExec.exe ''* -u "username" -p "password" -h -c "MyExe.exe"

它在 x86 计算机上工作正常,但在 x64 计算机上会失败并显示以下错误:-2146232576

如果我在 64 位机器上本地运行 *.exe,它工作正常。代码如下:

static void Main(string[] args)
{
    try
    {
        Directory.CreateDirectory(@"C:'Directory");
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    finally
    {
        try
        {
            File.Copy(@"''x.x.x.x'MyDll.dll", @"C:'Directory'MyDll.dll");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
            try
            {
                var p = new Process
                            {
                                StartInfo =
                                    {
                                        FileName = @"C:'Windows'Microsoft.NET'Framework'v4.0.30319'RegAsm.exe",
                                        Arguments = @"C:'Directory'MyDll.dll",
                                        UseShellExecute = false
                                    }
                            };

                var q = new Process
                            {
                                StartInfo =
                                    {
                                        FileName = @"C:'Windows'Microsoft.NET'Framework'v4.0.30319'RegAsm.exe",
                                        Arguments = @"C:'Directory'MyDll.dll /tlb",
                                        UseShellExecute = false
                                    }
                            };

                var r = new Process
                            {
                                StartInfo =
                                    {
                                        FileName = @"C:'Windows'Microsoft.NET'Framework'v4.0.30319'RegAsm.exe",
                                        Arguments = @"C:'Directory'MyDll.dll /codebase",
                                        UseShellExecute = false
                                    }
                            };
                p.Start();
                q.Start();
                r.Start();
            }
            catch(Exception z)
            {
                Console.WriteLine(z.Message);
            }
        }
        Console.WriteLine("Done and Done");
    }
}

为什么此代码无法在基于 x64 的 Windows 计算机上远程运行

您得到的错误是 1792 = ERROR_NETLOGON_NOT_STARTED = "尝试登录,但网络登录服务未启动。

Mark Russinovich的这篇文章讨论了PsExec的安全方面。

尝试使用 -i 选项运行它。