Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从远程计算机获取环境变量非常慢_C#_.net_Winapi - Fatal编程技术网

C# 从远程计算机获取环境变量非常慢

C# 从远程计算机获取环境变量非常慢,c#,.net,winapi,C#,.net,Winapi,我使用以下代码从远程机器检索环境变量 问题是,代码需要很长时间才能运行 DataTable envVarliables = new DataTable(); envVarliables.Columns.Add("UserName"); envVarliables.Columns.Add("VarName"); envVarliables.Columns.Add("VarValue"); Ma

我使用以下代码从远程机器检索环境变量

问题是,代码需要很长时间才能运行

    DataTable envVarliables = new DataTable();
            envVarliables.Columns.Add("UserName");
            envVarliables.Columns.Add("VarName");
            envVarliables.Columns.Add("VarValue");

            ManagementObjectSearcher query = null;
            ManagementObjectCollection queryCollection = null;

            ConnectionOptions opt = new ConnectionOptions();

            opt.Impersonation = ImpersonationLevel.Impersonate;
            opt.EnablePrivileges = true;

            opt.Username = @"domain\user";
            opt.Password = @"password";
            try
            {
                ManagementPath p = new ManagementPath(@"\\servername" + "\\root\\cimv2");

                ManagementScope msc = new ManagementScope(p, opt);

                SelectQuery q = new SelectQuery("select * from Win32_Environment where Name='IBMSENV' ");

                query = new ManagementObjectSearcher(msc, q, null);
                queryCollection = query.Get();

                //Console.WriteLine(queryCollection.Count);
                List<string> temp = new List<string>();

                  foreach (ManagementBaseObject envVar in queryCollection)
                    {
                        if (envVar["Name"].ToString() == "MYENVVARNAME")
                        {
                            envVarliables.Rows.Add(envVar["UserName"].ToString(), envVar["Name"].ToString(),
                            envVar["VariableValue"].ToString());
                        }
envVar["VariableValue"].ToString());
                        //temp.Add(envVar["Name"].ToString());
                    }
                return envVarliables;
DataTable envVarliables=newdatatable();
envVarliables.Columns.Add(“用户名”);
envVarliables.Columns.Add(“VarName”);
envVarliables.Columns.Add(“VarValue”);
ManagementObjectSearcher查询=null;
ManagementObjectCollection queryCollection=null;
ConnectionOptions opt=新的ConnectionOptions();
opt.Impersonation=ImpersonationLevel.Impersonate;
opt.EnablePrivileges=true;
opt.Username=@“域\用户”;
opt.Password=@“Password”;
尝试
{
ManagementPath p=新的管理路径(@“\\servername”+“\\root\\cimv2”);
ManagementScope msc=新的管理范围(p,opt);
SelectQuery q=new SelectQuery(“从Win32_环境中选择*,其中Name='IBMSENV'”);
query=新的ManagementObjectSearcher(msc、q、null);
queryCollection=query.Get();
//Console.WriteLine(queryCollection.Count);
列表温度=新列表();
foreach(queryCollection中的ManagementBaseObject环境变量)
{
if(envVar[“Name”].ToString()=“MYENVVARNAME”)
{
envVarliables.Rows.Add(envVar[“UserName”].ToString(),envVar[“Name”].ToString(),
envVar[“VariableValue”].ToString());
}
envVar[“VariableValue”].ToString());
//临时添加(envVar[“Name”].ToString());
}
归还债务;
我的问题在foreach(queryCollection中的ManagementBaseObject envVar) 当它第一次到达该行时,需要大约30秒到1.5分钟甚至更多的时间来执行

在那之后,它的循环非常快

问题是,我能改进一些东西使它工作得更快吗

还有一个问题,是否有其他方法从远程机器获取数据? 例如,从我使用的远程机器获取其他数据
但它没有检索环境变量的方法

我以前见过这种情况,或者类似的情况。请尝试在远程计算机的防火墙中启用“远程服务管理(RPC)”异常。将要求它执行此操作,thanks@HarryJohnston-嗨,我试过你的建议,但没用:(我想可能是另一个端口。尝试在初始延迟期间使用
netstat
,查看客户端是否正在尝试连接并被防火墙阻止;查找SYN_SENT的状态。@HarryJohnston我不确定这是端口问题。它自己的查询在远程计算机上执行,行为“queryCollection=query.Get()”该行在不到一秒钟的时间内执行。它第一次尝试运行此行中的成员“foreach(queryCollection中的ManagementBaseObject envVar)”需要30秒或更长时间