Visual Studio에서 Small 샌드 박스 프로젝트를 작업 중입니다. 여기 내 코드입니다 :C# Sandbox Environment
namespace Andromeda.PCTools
{
public partial class Sandbox : MetroForm
{
private AppDomain sandbox;
public Sandbox()
{
InitializeComponent();
}
private void Sandbox_Load(object sender, EventArgs e)
{
}
private void btnAdd_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "Applications|*.exe", ValidateNames = true, Multiselect = false })
{
if (ofd.ShowDialog() == DialogResult.OK)
{
listBoxItems.Items.Add(ofd.FileName);
}
}
}
private void removeSelectedToolStripMenuItem_Click(object sender, EventArgs e)
{
if (listBoxItems.SelectedItems.Count != 0)
{
while (listBoxItems.SelectedIndex != -1)
{
listBoxItems.Items.RemoveAt(listBoxItems.SelectedIndex);
}
}
}
private void btnLoad_Click(object sender, EventArgs e)
{
PermissionSet ps = new PermissionSet(PermissionState.None);
ps.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
AppDomainSetup setup = new AppDomainSetup();
Evidence ev = new Evidence();
//ev.AddHostEvidence(new Zone(SecurityZone.Internet));
PermissionSet internetPS = SecurityManager.GetStandardSandbox(ev);
setup.ApplicationBase = Path.GetFullPath(Application.StartupPath);
//StrongName fullTrustAssembly = typeof(Sandboxer).Assembly.Evidence.GetHostEvidence<StrongName>();
sandbox = AppDomain.CreateDomain(listBoxItems.SelectedItem.ToString(), ev, setup, ps);
try
{
sandbox.ExecuteAssembly(listBoxItems.SelectedItem.ToString());
btnLoad.Enabled = false;
btnUnload.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show("The following error occurred!\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btnUnload_Click(object sender, EventArgs e)
{
try
{
AppDomain.Unload(sandbox);
btnLoad.Enabled = true;
btnUnload.Enabled = false;
}
catch (Exception ex)
{
MessageBox.Show("The following error occurred!\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
하지만 난 다음 오류 얻을 :
Exception thrown: 'System.Security.SecurityException' in Andromeda 4.0.exe ("Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.")
오류 * * 어디서 *? 거기에 많은 무관 한 코드가 있습니다. [MCVE] (http://stackoverflow.com/help/mcve)를 참조하십시오. –
실행하려고하는 어셈블리에는 파일 I/O가 관련되어 있습니까? 그렇다면 실제로 그런 일이 일어나지 않을 것이라고 생각하십니까? –
기본적으로 EXE는 장치를 변경 (해치) 할 수없는 환경에서 실행하려고합니다. – Anthony