Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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# 如何使用.NET远程扩展环境变量?_C#_.net_Environment Variables_Remote Access - Fatal编程技术网

C# 如何使用.NET远程扩展环境变量?

C# 如何使用.NET远程扩展环境变量?,c#,.net,environment-variables,remote-access,C#,.net,Environment Variables,Remote Access,我需要一种在远程机器上扩展环境变量的方法 假设我有一个文件夹%appdata%\MyApp\Plugins或%ProgramFiles%\MyCompany\MyApp\Plugins的路径,我想列出该文件夹中的文件以供审核。唯一的问题是我想在远程机器上做这件事,但是我有管理员权限访问它 一个额外的问题(但不是必要的)是如何为远程机器上的给定用户做到这一点?这个问题没有意义。环境变量不是每台机器的变量。例如,您可以期望%appdata%指向C:\users\目录中的某个位置,但具体位置显然取决于

我需要一种在远程机器上扩展环境变量的方法

假设我有一个文件夹
%appdata%\MyApp\Plugins
%ProgramFiles%\MyCompany\MyApp\Plugins
的路径,我想列出该文件夹中的文件以供审核。唯一的问题是我想在远程机器上做这件事,但是我有管理员权限访问它


一个额外的问题(但不是必要的)是如何为远程机器上的给定用户做到这一点?

这个问题没有意义。环境变量不是每台机器的变量。例如,您可以期望
%appdata%
指向
C:\users\
目录中的某个位置,但具体位置显然取决于用户。以管理员身份登录对您仍然没有帮助;这只会告诉你管理员的
%appdata%
在哪里。

这个问题没有意义。环境变量不是每台机器的变量。例如,您可以期望
%appdata%
指向
C:\users\
目录中的某个位置,但具体位置显然取决于用户。以管理员身份登录对您仍然没有帮助;这只会告诉您管理员的
%appdata%
在哪里。

您将使用。您可以使用许多不同的值,包括
程序文件
应用程序数据

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
然后你就可以把它和你剩下的路结合起来

string full_path = Path.Combine(path, "\MyApp\Plugins");
在远程机器上,您可以尝试以下操作

对于所有远程环境变量及其值的列表,请从

操作编辑: 另外,
%AppData%
可以从注册表(可以远程完成)中找到,该注册表位于
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell文件夹
,程序文件位于
HKLM\Software\Microsoft\Windows\CurrentVersion
下,您可以使用。您可以使用许多不同的值,包括
程序文件
应用程序数据

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
然后你就可以把它和你剩下的路结合起来

string full_path = Path.Combine(path, "\MyApp\Plugins");
在远程机器上,您可以尝试以下操作

对于所有远程环境变量及其值的列表,请从

操作编辑:
另外,
%AppData%
可以从注册表中找到(可以远程完成),网址是
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell文件夹
,程序文件位于
HKLM\Software\Microsoft\Windows\CurrentVersion
,在
ProgramfilesDir

下,环境变量是“计算机范围和每用户设置”的合并。正在运行的进程可以修改其环境,当它产生另一个进程时,该进程将继承创建它的进程的环境

除非您有权访问远程计算机上运行的进程(或者可以启动一个进程),否则没有“环境”这样的东西:它的上下文根本不存在。特定流程的环境是以下所有功能的函数:

  • 从父进程环境继承的环境(可能在与子进程不同的用户帐户下运行)
  • 计算机范围的环境设置
  • 用户指定的任何环境设置
  • 过程本身所做的任何更改
也就是说,Windows在注册表中保留其环境变量设置:

  • 用户变量。
    HKEY\U CURRENT\U User\Environment
  • 系统变量。
    HKEY\U LOCAL\U MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
如果您有适当的权限访问远程计算机的注册表,您应该能够找到您需要的


请注意,环境变量可能是根据其他环境变量定义的:我相信您可能会自己处理适当的扩展。

环境变量是“计算机范围和每用户设置”的合并。正在运行的进程可以修改其环境,当它产生另一个进程时,该进程将继承创建它的进程的环境

除非您有权访问远程计算机上运行的进程(或者可以启动一个进程),否则没有“环境”这样的东西:它的上下文根本不存在。特定流程的环境是以下所有功能的函数:

  • 从父进程环境继承的环境(可能在与子进程不同的用户帐户下运行)
  • 计算机范围的环境设置
  • 用户指定的任何环境设置
  • 过程本身所做的任何更改
也就是说,Windows在注册表中保留其环境变量设置:

  • 用户变量。
    HKEY\U CURRENT\U User\Environment
  • 系统变量。
    HKEY\U LOCAL\U MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
如果您有适当的权限访问远程计算机的注册表,您应该能够找到您需要的


请注意,环境变量可能是根据其他环境变量定义的:我相信您可能会自己处理适当的扩展。

据我所知,解析%ProgramFiles%的唯一方法是通过注册表,因为这在Win32_环境中是不公开的(尽管文档另有建议)。所以这很好:

$key = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine,$serverName);
$versionKey = $key.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion');
$versionKey.GetValue('ProgramFilesDir')
但是,我似乎无法使用这种方法取回Program Files(x86)文件夹-我在注册表中看到的项没有使用注册表API“显示”。奇怪


当然,如果您在远程计算机上运行Powershell远程处理,我想这将相当容易…

据我所知,解析%ProgramFiles%的唯一方法是通过注册表