Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Use o SDK de .NET, TypeScript ou Rust para executar um comando no isolamento de processos do Windows. Cada exemplo cria uma entrada de exemplo, permite que a carga de trabalho a leia e concede acesso de escrita a uma pasta de saída separada. As permissões de rede e interface de utilizador continuam negadas.
A sua aplicação anfitriã cria a política e trata do resultado. O comando corre dentro do MXC; o resto da aplicação anfitriã não.
Os exemplos utilizam as APIs do SDK MXC 1.0 V1. Os SDKs V1 usam o esquema estável 1.0.0 internamente, por isso não especifica uma versão do esquema no pedido. Veja Escolher um esquema compatível.
Prerequisites
Precisas:
- Windows 11, versão 24H2 ou posterior, com um ambiente ProcessContainer suportado.
- Para C#, o SDK do .NET 8 ou posterior e o
Microsoft.Mxc.Sdkpacote NuGet. - Para o TypeScript, o npm, o pacote
@microsoft/mxc-sdke o Node.js 24.21.0 ou posterior na linha de lançamento do Node.js 24, ou o Node.js 26.8.0 ou posterior. - Para Rust, uma cadeia de ferramentas Rust estável com as ferramentas de construção MSVC e a
mxc-sdkcrate. Veja Configure o seu ambiente de desenvolvimento Rust no Windows. - Um diretório de trabalho gravável e PowerShell para os comandos de configuração.
As instruções utilizam os pacotes MXC 1.0 da NuGet.org, npm e crates.io. Não é necessária nenhuma compilação de origem MXC.
Verifique o suporte da plataforma antes de executar o exemplo. Uma versão do Windows suportada não garante que todas as funcionalidades opcionais estejam disponíveis.
Em alguns hosts, o MXC executa isolamento de processos numa camada de reserva baseada em AppContainer. Esse nível exige uma preparação única do disco do sistema e do dispositivo nulo, e a definição do dispositivo nulo é reposta a cada reinício. Quando falta preparação, a sonda do host do MXC devolve um aviso que indica o wxc-host-prep.exe subcomando para executar. O exemplo do TypeScript imprime estes avisos a partir de getPlatformSupport(), e também pode verificar um host executando wxc-exec.exe --probe. Como wxc-host-prep.exe requer aprovação do administrador, pede a um administrador para executar o comando recomendado em vez de o executar a partir da tua aplicação. Para mais detalhes, consulte Preparação do host.
1. Criar um projeto
Cria uma aplicação de consola e adiciona o pacote MXC da NuGet.org:
dotnet new console -n MxcQuickstart
Set-Location MxcQuickstart
dotnet add package Microsoft.Mxc.Sdk
2. Definir e executar a carga de trabalho
O isolamento de processos encaixa neste comando de curta duração porque necessita de ficheiros do anfitrião selecionados e sem ambiente persistente. Outras cargas de trabalho podem exigir um tipo de confinamento diferente.
O anfitrião cria workspace\input e workspace\output no diretório do projeto. O comando contido lê input.txt e escreve result.txt. Não recebe acesso de escrita ao seu diretório de entrada nem a outros ficheiros do projeto.
O anfitrião fornece um ambiente pequeno e explícito em vez de herdar as suas próprias variáveis. Quando fornecer um ambiente para uma carga de trabalho do Windows ProcessContainer, inclua tanto SystemRoot como LOCALAPPDATA. O MXC rejeita o pedido antes do lançamento se algum deles estiver em falta. O exemplo aponta LOCALAPPDATA, TEMP, e TMP para o diretório de saída concedido, de modo que ficheiros temporários e por utilizador permaneçam dentro da política.
Substitua Program.cs por:
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;
}
Execute o aplicativo:
dotnet run
Cada versão imprime:
Sandbox exited with code 0
Hello from MXC!
Também pode inspecionar workspace\output\result.txt.
3. Verificar uma operação negada
Altere apenas a declaração do ficheiro de saída para que o comando tente escrever no diretório de entrada apenas de leitura:
string outputFile = Path.Combine(inputDirectory, "blocked.txt");
Executa a aplicação novamente sem alterar a política. Espere um erro de acesso negado e um código de saída diferente de zero, sem ficheiro novo workspace\input\blocked.txt . Restaure a declaração original do ficheiro de saída e confirme que a operação permitida continua a ter êxito.
Se a execução permitida falhar, distinga os erros de instalação/configuração inicial do host ou de configuração de uma negação de recurso. Utilize o Modo de Aprendizagem para investigar a última; não alargue a política automaticamente.
4. Adapte o exemplo
Substitua o comando de exemplo e as entradas por uma carga de trabalho representativa de confiança. Revise binários de ferramentas, bibliotecas, ficheiros temporários e saídas obrigatórios. Adicionar acesso à rede ou à interface apenas quando a tarefa o exigir e quando o backend selecionado conseguir impor as restrições pretendidas.
Testar operações permitidas e recusadas em todos os hosts de destino. Quando usar o Modo Aprendizagem para refinar a política, reveja cada observação e termine com uma execução de aplicação sem definições de aprendizagem ou auditoria.
Opcional: usar um agente de codificação
Dê ao seu agente as plataformas-alvo, linguagem e versão do SDK, comandos, recursos necessários, ciclo de vida e objetivos de isolamento. Pode adaptar este prompt:
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.
Reveja as suposições do agente e a política resultante. Um agente pode ajudar na integração, mas código de host fiável ou uma pessoa deve aprovar alterações à autorização da carga de trabalho.
Passos seguintes
- Revise a arquitetura MXC e os modelos de contenção antes de usar backends persistentes ou especializados.
- Aprenda a criar e validar uma política MXC.
- Compare as opções de contenção MXC e o suporte da plataforma.
- Revise todo o fluxo de trabalho do Modo de Aprendizagem.
- Adapte os exemplos de políticas MXC a outras cargas de trabalho.
- Encontre pacotes SDK e notas de lançamento nas versões MXC.
Windows developer