Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте пакет SDK .NET, TypeScript или Rust, чтобы выполнить команду в режиме изоляции процессов Windows. Каждый пример создает образец входных данных, позволяет рабочей нагрузке читать их и предоставляет рабочей нагрузке доступ на запись в отдельную выходную папку. Разрешения сети и пользовательского интерфейса по-прежнему не предоставлены.
Главное приложение создает политику и обрабатывает результат. Команда выполняется внутри MXC; остальная часть хост-приложения не выполняется.
В примерах используются API SDK MXC 1.0 V1. Пакеты SDK версии 1 используют стабильную схему 1.0.0 внутри системы, поэтому в запросе не нужно указывать версию схемы. См. раздел Выбор совместимой схемы.
Prerequisites
Тебе нужно:
- Windows 11 версии 24H2 или более поздней, в поддерживаемой среде ProcessContainer.
- Для C# требуются .NET 8 SDK или более поздней версии и пакет NuGet
Microsoft.Mxc.Sdk. - Требуются TypeScript, npm, пакет
@microsoft/mxc-sdkи Node.js 24.21.0 или более поздней версии в ветке выпуска Node.js 24 либо Node.js 26.8.0 или более поздней версии. - Для Rust — стабильная цепочка инструментов Rust с инструментами сборки MSVC и crate
mxc-sdk. См. статью "Настройка среды разработки Rust" в Windows. - Рабочий каталог с возможностью записи и PowerShell для команд установки.
В инструкциях используются пакеты MXC 1.0 из NuGet.org, npm и crates.io. Сборка из исходников MXC не требуется.
Перед запуском примера проверьте поддержку платформы . Поддерживаемая версия Windows не гарантирует доступность каждой необязательной функции.
На некоторых узлах MXC выполняет изоляцию процесса в резервном уровне на основе AppContainer. Для этого уровня требуется однократная подготовка системного диска и устройства NULL, а параметры null-устройства сбрасываются при каждом перезапуске. При отсутствии подготовки проба узла MXC возвращает предупреждение с указанием подкоманды wxc-host-prep.exe, которую нужно выполнить. В примере TypeScript выводятся эти предупреждения из getPlatformSupport(), а также можно проверить хост, выполнив команду wxc-exec.exe --probe. Так как для wxc-host-prep.exe требуется одобрение администратора, попросите администратора выполнить рекомендуемую команду, а не запускать ее из приложения. Дополнительные сведения см. в разделе Подготовка узла.
1. Создание проекта
Создайте консольное приложение и добавьте пакет MXC из NuGet.org:
dotnet new console -n MxcQuickstart
Set-Location MxcQuickstart
dotnet add package Microsoft.Mxc.Sdk
2. Определите и запустите рабочую нагрузку
Изоляция процессов соответствует этой кратковременной команде, так как ей нужны выбранные файлы хоста и без сохранения окружения. Для других рабочих нагрузок может потребоваться другой тип контейнера.
Хост создает workspace\input и workspace\output под каталогом проекта. Содержащаяся команда считывает result.txtи записываетinput.txt. Он не получает доступ на запись к входной папке или доступ к другим файлам проекта.
Хост предоставляет небольшую явную среду вместо того, чтобы наследовать свои переменные среды. Если вы предоставляете среду для рабочей нагрузки Windows ProcessContainer, включите оба SystemRoot иLOCALAPPDATA. MXC отклоняет запрос перед запуском, если любой из двух отсутствует. Пример указывает точки LOCALAPPDATA, TEMP и TMP на предоставленный выходной каталог, чтобы временные и пользовательские файлы оставались в рамках политики.
Замените Program.cs на:
using Microsoft.Mxc.Sdk.V1;
if (!OperatingSystem.IsWindows())
{
Console.Error.WriteLine("This example requires Windows.");
return 1;
}
try
{
var support = MxcPlatform.GetPlatformSupport();
if (!support.IsSupported ||
!support.AvailableMethods.Contains(ContainmentBackend.ProcessContainer))
{
Console.Error.WriteLine(support.Reason ?? "Windows ProcessContainer is unavailable.");
return 1;
}
string inputDirectory = Path.GetFullPath(@"workspace\input");
string outputDirectory = Path.GetFullPath(@"workspace\output");
string outputFile = Path.Combine(outputDirectory, "result.txt");
string commandInterpreter = Path.Combine(Environment.SystemDirectory, "cmd.exe");
Directory.CreateDirectory(inputDirectory);
Directory.CreateDirectory(outputDirectory);
File.WriteAllText(Path.Combine(inputDirectory, "input.txt"), "Hello from MXC!\n");
var request = new ContainerRequest(
$"\"{commandInterpreter}\" /d /c type input.txt > \"{outputFile}\"")
{
Containment = new Containment.Process(),
Filesystem = new FilesystemPolicy
{
ReadonlyPaths = { inputDirectory, commandInterpreter },
ReadwritePaths = { outputDirectory },
},
// Omitted network and UI permissions remain denied.
WorkingDirectory = inputDirectory,
Environment = new()
{
["SystemRoot"] = Environment.GetFolderPath(Environment.SpecialFolder.Windows),
["LOCALAPPDATA"] = outputDirectory,
["TEMP"] = outputDirectory,
["TMP"] = outputDirectory,
},
TimeoutMs = 30_000,
};
ExecutionResult result = await MxcContainer.RunAsync(request);
Console.Write(result.Stdout);
Console.Error.Write(result.Stderr);
foreach (string warning in result.Warnings)
{
Console.Error.WriteLine(warning);
}
if (result.TimedOut)
{
Console.Error.WriteLine("The workload exceeded its timeout.");
return 1;
}
Console.WriteLine($"Sandbox exited with code {result.ExitCode}");
if (result.ExitCode == 0)
{
Console.Write(File.ReadAllText(outputFile));
}
return result.ExitCode;
}
catch (MxcException ex)
{
Console.Error.WriteLine(ex);
if (ex.Remediation is not null)
{
Console.Error.WriteLine(ex.Remediation);
}
return 1;
}
Запустите приложение:
dotnet run
Каждая версия печатает:
Sandbox exited with code 0
Hello from MXC!
Вы также можете проверить workspace\output\result.txt.
3. Проверьте запрещенную операцию
Измените только объявление выходного файла, чтобы команда попыталась записать в каталог входных данных только для чтения:
string outputFile = Path.Combine(inputDirectory, "blocked.txt");
Снова запустите приложение, не изменяя политику. Ожидается ошибка «Отказано в доступе» и ненулевой код выхода без нового файла workspace\input\blocked.txt. Восстановите исходное объявление выходного файла и убедитесь, что разрешенная операция по-прежнему выполняется успешно.
Если разрешенный запуск завершается сбоем, различайте ошибки настройки хоста или конфигурации и отказ в ресурсе. Используйте режим обучения, чтобы изучить последнее; не расширяйте политику автоматически.
4. Адаптируйте пример
Замените пример команды и входные данные на надежную репрезентативную рабочую нагрузку. Просмотрите двоичные файлы, библиотеки, временные файлы и выходные данные необходимого инструмента. Добавьте доступ к сети или пользовательскому интерфейсу только в том случае, если этого требует задача, а выбранный бэкенд может применить предполагаемые ограничения.
Тестирование разрешенных и запрещенных операций на каждом целевом узле. При использовании режима обучения для уточнения политики просмотрите каждое наблюдение и завершите принудительным запуском без параметров обучения или аудита.
Необязательно: используйте агента для программирования
Предоставьте агенту целевые платформы, язык пакета SDK и версию, команду, необходимые ресурсы, жизненный цикл и цели изоляции. Вы можете адаптировать этот запрос:
Use the MXC Learn quickstart and the documentation for my installed SDK release.
Integrate this workload through the .NET, TypeScript, or Rust SDK used by this project.
First identify the command, target platforms, input and output paths, network
and UI requirements, and whether state must persist between commands.
Explain the containment choice and create the narrowest policy that fits.
Run both permitted and denied cases and report the effective permissions.
Do not execute the workload outside MXC to get around a failure. Ask for my
approval before expanding access, changing host settings, or using permissive
Learning Mode. Treat observed resource access as evidence, not automatic grants.
Ознакомьтесь с предположениями агента и полученным правилом. Агент может помочь в интеграции, но доверенный код узла или человек должен утвердить изменения в полномочиях рабочей нагрузки.
Дальнейшие действия
- Ознакомьтесь с архитектурой MXC и моделями изоляции перед использованием постоянных или специализированных бэкендов.
- Узнайте, как создавать и проверять политику MXC.
- Сравните варианты изоляции MXC и поддержку платформы.
- Просмотрите полный рабочий процесс режима обучения.
- Адаптируйте примеры политики MXC к другим рабочим нагрузкам.
- Найдите пакеты SDK и заметки о выпуске в выпусках MXC.
Windows developer