4. הפעלת ארגז החול
בקטעים הקודמים הכנתם את סביבת הארגז, את המדיניות ואת רכיבי ה-executor וה-Sandboxee. השלב הבא הוא ליצור את האובייקט Sandbox2
ולהפעיל אותו.
הרצה סינכרונית
ארגז החול יכול לפעול באופן סינכרוני, ולכן הוא נחסם עד שמתקבלת תוצאה. בקטע הקוד הבא מוצגת יצירת מופע של האובייקט Sandbox2
וההרצה הסינכרונית שלו. דוגמה מפורטת יותר זמינה במאמר בנושא סטטי.
#include "sandboxed_api/sandbox2/sandbox2.h"
sandbox2::Sandbox2 s2(std::move(executor), std::move(policy));
sandbox2::Result result = s2.Run(); // Synchronous
LOG(INFO) << "Result of sandbox execution: " << result.ToString();
הרצה אסינכרונית
אפשר גם להריץ את ארגז החול באופן אסינכרוני, כך שהוא לא ייחסם עד שיתקבלו תוצאות. זה שימושי, למשל, כשמתקשרים עם Sandboxee. קטע הקוד שבהמשך מדגים את תרחיש השימוש הזה. דוגמאות מפורטות נוספות זמינות במאמרים בנושא crc4 וtool.
#include "sandboxed_api/sandbox2/sandbox2.h"
sandbox2::Sandbox2 s2(std::move(executor), std::move(policy));
if (s2.RunAsync()) {
// Communicate with sandboxee, use s2.Kill() to kill it if needed
// ...
}
Sandbox2::Result result = s2.AwaitResult();
LOG(INFO) << "Final execution status: " << result.ToString();