// TARGET:outlook.exe /importprf %TEMP%\LoginPI\Outlook.prf // START_IN: ///////////// // Outlook Start // Workload: Activation-less Office Workloads // Version: 1.0.0 ///////////// using LoginPI.Engine.ScriptBase; using System; using System.IO; public class Outlook_Start_Office_Activation_less : ScriptBase { // ===================================================== // Configurable Variables // ===================================================== int globalWaitInSeconds = 3; // Wait time between actions int waitMessageboxInSeconds = 2; // Duration for onscreen wait messages int activationDialogRetryCount = 2; // How many times to try dismissing activation dialogs // ===================================================== // Execute Method // ===================================================== private void Execute() { Log("Preparing Outlook activation-less workload."); // Create TEMP\LoginPI directory string temp = GetEnvironmentVariable("TEMP"); string targetDir = Path.Combine(temp, "LoginPI"); if (!Directory.Exists(targetDir)) { Directory.CreateDirectory(targetDir); Log("Created directory: " + targetDir); } // Remove old config files if present string prfFile = Path.Combine(targetDir, "Outlook.prf"); string pstFile = Path.Combine(targetDir, "Outlook.pst"); TryDelete(prfFile); TryDelete(pstFile); // Download fresh PRF & PST Wait(waitMessageboxInSeconds, showOnScreen: true, onScreenText: "Get PRF & PST"); Log("Downloading PRF & PST files."); CopyFile(KnownFiles.OutlookConfiguration, prfFile, continueOnError: true, overwrite: false); CopyFile(KnownFiles.OutlookData, pstFile, continueOnError: true, overwrite: false); // Patch PRF placeholders string prfContent = File.ReadAllText(prfFile).Replace("%TEMP%", temp); File.WriteAllText(prfFile, prfContent); Log("Updated PRF file with current TEMP path."); // Launch Outlook Wait(waitMessageboxInSeconds, showOnScreen: true, onScreenText: "Starting Outlook"); Log("Starting Outlook."); START( mainWindowTitle: "Inbox*", mainWindowClass: "Win32 Window:rctrl_renwnd32", processName: "OUTLOOK", timeout: 60, continueOnError: true ); // Dismiss activation dialogs SkipActivationDialogs(); // Finalize Wait(globalWaitInSeconds); MainWindow.Maximize(); MainWindow.Focus(); Log("Outlook is now ready."); } // ===================================================== // Helper: Try to delete a file without failing // ===================================================== private void TryDelete(string path) { try { if (File.Exists(path)) File.Delete(path); } catch (Exception ex) { Log($"Error deleting file {path}: {ex.Message}"); } } // ===================================================== // Helper: Dismiss Activation Dialogs (NUIDialog) // ===================================================== private void SkipActivationDialogs() { for (int i = 0; i < activationDialogRetryCount; i++) { var dialog = MainWindow.FindControlWithXPath( "Win32 Window:NUIDialog", timeout: 3, continueOnError: true ); if (dialog == null) break; Wait(globalWaitInSeconds); dialog.Type("{ESC}", hideInLogging: false); Log("Dismissed an activation dialog."); } } }