Office Add-In Monitor
Download
Report
Transcript Office Add-In Monitor
MICROSOFT OFFICE
ADD-IN MONITOR
Cradle to Deployment
Matt Kramer
Director of Information Technology
[email protected]
BERNSTEIN SHUR | Portland, ME | Augusta, ME | Manchester, NH
Member, Lex Mundi, the world's leading association of independent law firms.
WHAT’S THE BIG DEAL
Office Applications Frequently have a large number of 3rd
party plug-ins to extend functionality:
Screenshot:
Outlook
Lists
16 loaded
Add-ins!!
WHAT’S THE BIG DEAL
Screenshot of Word Add-Ins Lists 31 Add-Ins!!!
OFFICE
EXTENSIBILITY
Microsoft Office can be extended in many ways
Add-Ins (DotNet and COM)
Templates
XML
VBA
Various plugins share a common foundation
Outlook Redemption.dll
VSTO
Office PIA
OFFICE
EXTENSIBILITY
All of this leads to tremendous flexibility…
and instability…
and…
Help Desk Tickets…
and…
Unhappy Clients…
Which leads us to…
Office Add-In Monitor
WHAT IS IT?
Office Add-In Monitor:
Prevents disabling of 3rd Party Plugins to Office
Works with Office 2010 and Office 2007
Runs on W7 (x64),XP, and Citrix.
Lightweight C# Application
Always on in System Tray
Currently Protects:
Outlook
Word
Excel
PowerPoint
HOW DOES IT WORK?
Office constantly writes
random values to registry
when an add-in is “active”
The Monitor “subscribes”
to registry write events
and deletes them when a
match is found.
DEMO TIME…
DEPLOYMENT - APP
Deploy via GPO:
DEPLOYMENT – REGISTRY
Application Controlled by Registry Keys:
Checks for values in:
HKCU\Software\Policies\AddInMon
HKCU\Software\AddInMon
Supported Values:
Debug REG_DWORD 0x1
Writes Log to %TEMP%\AddInMonDebug.txt
RegEx REG_SZ
Specify Add-ins to protect,
Separated via | “pipe” symbol
DEPLOYMENT – REGISTRY
Deploy via GPO:
DEVELOPMENT
Visual Studio 2010 C#
Major Components
Allow only one instance of application to run.
Load to System Tray
Monitor Registry Writes for Office
Delete Registry Keys by RegEx Pattern Matching
Ease of Deployment
Control Program by Group Policy Registry Keys
DEVELOPMENT
Allow only one application instance
bool isNew;
Mutex mutex = new Mutex(true, Application.ProductName, out isNew);
if (isNew)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
mutex.ReleaseMutex();
}
DEVELOPMENT
Monitor For Registry Events
Example: HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word
//Build Query for Registry Keys We Want To Monitor
WqlEventQuery query = new WqlEventQuery("SELECT * FROM RegistryTreeChangeEvent WHERE"
+ "Hive = 'HKEY_USERS' " + @"AND (
RootPath = '" + userName + @"\\Software\\Microsoft\\Office\\" + ver + @"\\Word' or
RootPath = '" + userName + @"\\Software\\Microsoft\\Office\\" + ver + @"\\Outlook' or
RootPath = '" + userName + @"\\Software\\Microsoft\\Office\\" + ver + @"\\PowerPoint' or
RootPath = '" + userName + @"\\Software\\Microsoft\\Office\\" + ver + @"\\Excel')");
//Active the watcher for the specified registry keys
watcher = new ManagementEventWatcher(query);
//Call HandleEvent whenever a new registry value is received
watcher.EventArrived += new EventArrivedEventHandler(HandleEvent);
DEVELOPMENT
Hide Form on Application Startup
//Hide the form on initial startup
protected override void SetVisibleCore(bool value)
{
base.SetVisibleCore(allowshowdisplay ? value : allowshowdisplay);
if (firstLoad == false)
{
LoadProgram();
firstLoad = true;
}
}
DEVELOPMENT
Load Application from Tray Icon
//If the form is minimized then hide it and rely on the tray icon
private void Form1_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
this.Hide();
this.ShowInTaskbar = false;
}
}
//Open the form if the tray icon is double clicked
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
LoadFromTray();
}
QUESTIONS?
Go forth and protect your add-ins…
https://addinmon.codeplex.com/
Check www.iltanet.org for a copy of this
PowerPoint and audio recording
Matt Kramer
Director of Information Technology
[email protected]
BERNSTEIN SHUR | Portland, ME | Augusta, ME | Manchester, NH
Member, Lex Mundi, the world's leading association of independent law firms.