首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sysinternals从Asp.Net应用程序执行脚本

使用sysinternals从Asp.Net应用程序执行脚本
EN

Stack Overflow用户
提问于 2013-04-30 15:35:27
回答 1查看 3.8K关注 0票数 8

我正在尝试从我的PSExec应用程序中执行Asp.Net,以连接到远程服务器。它以某种方式给出没有设置凭据集的"Access Denied Error -5",并通过在PSEXEC命令中设置凭据给"2250 Network connection could not be found"。我是服务器上的管理员,我启用了Windows authentication and Asp.Net Impersonation (IIS7.5)。更有趣的是,当我尝试从console application或甚至只是使用command prompt来执行它时,它工作得很好。我试着做一个ping操作作为一个测试。

这是我的代码片段:-

代码语言:javascript
复制
            var startInfo = new ProcessStartInfo{
                CreateNoWindow = true,
                UseShellExecute = false,
                FileName = FilePath,
                Arguments = CommandArgs
            }

            Process vsCommandProcess = Process.Start(startInfo);

            vsCommandProcess.WaitForExit();
            var exitCode = vsCommandProcess.ExitCode;
            if (vsCommandProcess.ExitCode != 0)
            {
                ...rest of the code

在此:-

代码语言:javascript
复制
FilePath --> C:\pstools\psexec.exe
Arguments --> \\servername -accepteula -u domain\userName -p password ipconfig (1)
               \\servername -accepteula ipconfig (2)         

(1) Gives Error 2250 (2) gives Error 5

相同的命令和代码适用于控制台应用程序。因此,我相信这肯定与Asp.net应用程序有关,该应用程序无法将凭据传递到远程到机器。我试过startInfo.LoadUserProfile,但没有结果。

感谢你的帮助。我试着查找类似的问题,但没有找到解决我所面临的问题的办法。

EN

回答 1

Stack Overflow用户

发布于 2013-07-04 02:12:04

考虑将psexec从流程中删除。直接去WMI可能会让我们更深入地了解到底出了什么问题:

代码语言:javascript
复制
var connOpts = new ConnectionOptions()
{
// Optional, default is to use current identity
    Username = "username",
    Password = "password"
};

// create a handle to the Win32_Process object on the remote computer
ManagementScope mgmtScope = new ManagementScope(@"\\servername\root\cimv2", connOpts);
ManagementClass w32Process = new ManagementClass(mgmtScope, 
    new ManagementPath("Win32_Process"), new ObjectGetOptions());

// create the process itself
object[] createArgs = new object[] {
    // [in]   string CommandLine,
    "notepad.exe", 
    // [in]   string CurrentDirectory,
    null, 
    // [in]   Win32_ProcessStartup ProcessStartupInformation,
    null, 
    // [out]  uint32 ProcessId
    0};

var result = (int)w32Process.InvokeMethod("Create", createArgs);

switch (result)
{
    case 0: /* no-op, successful start */ break;
    case 2: throw new Exception("Access Denied");
    case 3: throw new Exception("Insufficient Privilege");
    case 8: throw new Exception("Unknown failure");
    case 9: throw new Exception("Path not found");
    case 21: throw new InvalidOperationException("Invalid Parameter");
}

如果您仍然遇到模拟问题,则转储HttpContext.Current.User.Identity的内容以验证IIS配置是否正确可能会有所帮助。此外,如果您正在使用Kerberos (通过协商/SPNEGO),则可能需要允许机器委派标识。如果您知道机器将要连接到的SPN,您可以使用受限的委托,但是在许多情况下,如果没有提前知道目标,就必须允许无约束的委托。

注意:如果您只是为了运行ipconfig而对计算机进行远程处理,您可以通过WMI获得相同的信息,而不必试图将STDOUT输出返回到调用计算机。看看NetworkAdapterConfiguration类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16303688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档