【发布时间】:2021-11-19 21:21:35
【问题描述】:
我正在尝试使用 SetEnvironmentVariable method 通过 UWP 应用程序在 Windows 中创建环境变量,但似乎 UWP 在沙盒中运行时会阻止应用程序创建环境变量。
所以我创建了一个控制台应用程序来从 UWP 调用它:
var value = Environment.GetEnvironmentVariable("Test1", EnvironmentVariableTarget.User);
if (value == null)
{
var path = "pathTest";
Environment.SetEnvironmentVariable("Test1", path, EnvironmentVariableTarget.User);
Console.WriteLine("The environment variable has been created successfully");
}
else
{
Console.WriteLine("Environment variable already exists");
}
运行我在应用程序包中添加的控制台应用程序的 UWP 代码:
public class TestService : ITestService
{
public async Task ExecuteSampleApp()
{
await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();
}
}
我已经在同一个 UWP 应用程序包中添加了 .exe,并且我在 Package.appxmanifest 中添加了必要的权限 (runFullTrust) 以便能够运行外部应用程序(位于应用程序包中),最多这一点一切都很好,我可以从我的 UWP 应用程序运行控制台应用程序,但似乎从 UWP 应用程序运行时控制台应用程序无法创建环境变量,就像访问被带走了一样(我认为应用程序沙箱 UWP甚至对应用程序包中添加的 .exe 添加了相同的安全限制),但是如果我在编译 UWP 应用程序时创建的 bin 文件夹中运行相同的控制台应用程序,它可以工作,只有当 UWP 应用程序调用。EXE文件。任何人对如何使用我遵循的这种方法或其他方法在 UWP 中创建环境变量有任何其他想法?
使用这个控制台应用程序,是否可以绕过 UWP 沙盒安全限制运行 cmd 命令?
回复@RoyLi-MSFT: 不,没有例外,UWP应用程序执行控制台应用程序并显示消息“环境变量已存在”检测好像它已经存在,但是它没有在任何时候创建它,似乎控制台应用程序当它由 UWP 应用程序执行,它无法真正获取操作系统中是否存在环境变量,并返回错误状态(不存在时表示存在)。但是,如果控制台应用程序无论如何都运行,它确实可以工作,这表明这是一个 UWP 问题,它在由 UWP 应用程序执行时以某种方式将控制台应用程序隔离到与 UWP 应用程序相同的沙箱中。关于将exe文件放在应用程序包中的其他问题,我的意思是我在Assets文件夹中添加了负责注册环境变量的控制台应用程序,以便能够通过UWP使用FullTrustProcessLauncher执行它,因为它是唯一的从沙盒环境中运行 win32 应用程序的方式。
2º 对@RoyLi-MSFT 的回答: 我在我的代码中使用 EnvironmentVariableTarget.User,我放在这里的代码是一个示例(我已经更新了示例以澄清它),但我尝试使用 3 个可用的枚举:进程、用户和机器,用户类型是一个可以正常工作并且是我在控制台应用程序中使用的那个,但是正如我之前提到的,当 UWP 应用程序是运行控制台应用程序的那个时,它无法创建环境变量并且控制台显示:“环境变量已经存在" 尽管使用了 EnvironmentVariableTarget.User。
我澄清一点:当控制台应用程序手动运行时,如果它工作,它只在UWP应用程序负责执行它时显示“环境变量已存在”的消息@ 987654323@.
【问题讨论】:
-
您是否尝试将 EnvironmentVariableTarget 更改为 User? Environment.SetEnvironmentVariable("Test1", path, EnvironmentVariableTarget.User);
-
我想先确认一下。
can't create the environment variable是什么意思?它是否给出了例外或其他什么?你得到什么行为?还有就是你的意思是直接把exe文件放到app包里,而不是使用Windows Application Package Project(WAPP)? -
@jerry 是的,我尝试使用 3 个可用的枚举:进程、用户和机器,但正如我提到的控制台应用程序单独工作正常,当 UWP 应用程序运行控制台应用程序时会出现问题无法注册环境变量。
-
@RoyLi-MSFT 我已经用你的问题的答案更新了帖子,因为它很长。
标签: c# xamarin.forms uwp