Repository: tonyfederer/OutlookFileDrag
Branch: master
Commit: b9197a6baa5b
Files: 22
Total size: 243.0 KB
Directory structure:
gitextract_r8lm3glj/
├── .gitignore
├── LICENSE
├── License.rtf
├── OutlookFileDrag/
│ ├── App.config
│ ├── DataObjectHelper.cs
│ ├── DragDropHook.cs
│ ├── FileUtility.cs
│ ├── FormatEtcEnumerator.cs
│ ├── NativeMethods.cs
│ ├── OutlookDataObject.cs
│ ├── OutlookDragSource.cs
│ ├── OutlookFileDrag.csproj
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── ThisAddIn.Designer.cs
│ ├── ThisAddIn.Designer.xml
│ ├── ThisAddIn.cs
│ └── packages.config
├── OutlookFileDrag.sln
├── OutlookFileDragSetup/
│ └── OutlookFileDragSetup.vdproj
├── OutlookFileDragSetup_x64/
│ └── OutlookFileDragSetup_x64.vdproj
├── Readme.md
└── _config.yml
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
**/Properties/launchSettings.json
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush
.cr/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
================================================
FILE: LICENSE
================================================
Copyright (c) 2018 Tony Federer
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: OutlookFileDrag/App.config
================================================
================================================
FILE: OutlookFileDrag/DataObjectHelper.cs
================================================
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using log4net;
namespace OutlookFileDrag
{
static class DataObjectHelper
{
private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
internal static int GetClipboardFormat(string name)
{
var format = System.Windows.Forms.DataFormats.GetFormat(name);
if (format == null)
return 0;
else
return format.Id;
}
internal static bool GetDataPresent(NativeMethods.IDataObject data, string formatName)
{
//Check if data is present
log.DebugFormat("Get data present: {0}", formatName);
FORMATETC format = new FORMATETC();
format.cfFormat = (short)GetClipboardFormat(formatName);
format.dwAspect = DVASPECT.DVASPECT_CONTENT;
format.lindex = -1;
format.ptd = IntPtr.Zero;
format.tymed = TYMED.TYMED_ISTREAM | TYMED.TYMED_ISTORAGE | TYMED.TYMED_HGLOBAL;
return data.QueryGetData(format) == NativeMethods.S_OK;
}
internal static void SetDropFiles(ref STGMEDIUM medium, string[] filenames)
{
//Create DROPFILES structure
NativeMethods.DROPFILES dropFiles = new NativeMethods.DROPFILES();
dropFiles.pFiles = Marshal.SizeOf(dropFiles);
dropFiles.fWide = true; //Unicode
//Get null-separated list of filenames terminated with double null
string filenameList = string.Join("\0", filenames) + "\0\0";
byte[] filenameBytes = System.Text.Encoding.Unicode.GetBytes(filenameList);
//Allocate global memory and get pointer
int dataLength = Marshal.SizeOf(dropFiles) + filenameBytes.Length;
IntPtr ptrDropFiles = Marshal.AllocHGlobal(dataLength);
//Copy DROPFILES structure to global memory.
Marshal.StructureToPtr(dropFiles, ptrDropFiles, true);
//Copy filenames to memory after DROPFILES structure
IntPtr ptrFiles = IntPtr.Add(ptrDropFiles, Marshal.SizeOf(dropFiles));
Marshal.Copy(filenameBytes, 0, ptrFiles, filenameBytes.Length);
//Load structure into medium
medium.unionmember = ptrDropFiles;
medium.tymed = TYMED.TYMED_HGLOBAL;
medium.pUnkForRelease = IntPtr.Zero; //HGLOBAL to be released by caller
}
internal static string[] GetFilenames(NativeMethods.IDataObject data)
{
log.Debug("Getfilenames");
//Try Unicode first
string[] filenames = GetFilenamesUnicode(data);
//If Unicode returns null, try ANSI
if (filenames == null)
filenames = GetFilenamesAnsi(data);
return filenames;
}
internal static string[] GetFilenamesAnsi(NativeMethods.IDataObject data)
{
log.Debug("Getting filenames (ANSI)");
IntPtr ptrFgd = IntPtr.Zero;
STGMEDIUM medium = new STGMEDIUM();
try
{
//Define FileGroupDescriptor format
FORMATETC format = new FORMATETC();
format.cfFormat = (short)GetClipboardFormat("FileGroupDescriptor");
format.dwAspect = DVASPECT.DVASPECT_CONTENT;
format.lindex = -1;
format.ptd = IntPtr.Zero;
format.tymed = TYMED.TYMED_ISTREAM | TYMED.TYMED_ISTORAGE | TYMED.TYMED_HGLOBAL;
//Query if format exists in data
if (data.QueryGetData(format) != NativeMethods.S_OK)
{
log.Debug("No filenames found");
return null;
}
//Get data into medium
int retVal = data.GetData(format, out medium);
if (retVal != NativeMethods.S_OK)
throw new Exception(string.Format("Could not get FileGroupDescriptor format. Error returned: {0}", retVal));
//Read medium into byte array
log.Debug("Reading structure into memory stream");
byte[] bytes;
using (MemoryStream stream = new MemoryStream())
{
DataObjectHelper.ReadMediumIntoStream(medium, stream);
bytes = new byte[stream.Length];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(bytes, 0, bytes.Length);
}
//Copy byte array into unmanaged memory
log.Debug("Copying structure into unmanaged memory");
ptrFgd = Marshal.AllocHGlobal(bytes.Length);
Marshal.Copy(bytes, 0, ptrFgd, bytes.Length);
//Marshal unmanaged memory to a FILEGROUPDESCRIPTORA struct
log.Debug("Marshaling unmanaged memory into FILEGROUPDESCRIPTORA struct");
NativeMethods.FILEGROUPDESCRIPTORA fgd = (NativeMethods.FILEGROUPDESCRIPTORA)Marshal.PtrToStructure(ptrFgd, typeof(NativeMethods.FILEGROUPDESCRIPTORA));
log.Debug(string.Format("Files found: {0}", fgd.cItems));
//Create an array to store file names
string[] filenames = new string[fgd.cItems];
//Get the pointer to the first file descriptor
IntPtr fdPtr = IntPtr.Add(ptrFgd, sizeof(uint));
//Loop for the number of files acording to the file group descriptor
for (int fdIndex = 0; fdIndex < fgd.cItems; fdIndex++)
{
log.DebugFormat("Filenames found: {0}", string.Join(", ", filenames));
//Marshal pointer to a FILEDESCRIPTORA struct
NativeMethods.FILEDESCRIPTORA fd = (NativeMethods.FILEDESCRIPTORA)Marshal.PtrToStructure(fdPtr, typeof(NativeMethods.FILEDESCRIPTORA));
//Get filename of file descriptor and put in array
filenames[fdIndex] = fd.cFileName;
//Move the file descriptor pointer to the next file descriptor
fdPtr = IntPtr.Add(fdPtr, Marshal.SizeOf(fd));
}
log.DebugFormat("Filenames found: {0}", string.Join(", ", filenames));
return filenames;
}
finally
{
//Release all unmanaged objects
Marshal.FreeHGlobal(ptrFgd);
if (medium.pUnkForRelease == null)
NativeMethods.ReleaseStgMedium(ref medium);
}
}
internal static string[] GetFilenamesUnicode(NativeMethods.IDataObject data)
{
log.Debug("Getting filenames (Unicode)");
IntPtr ptrFgd = IntPtr.Zero;
STGMEDIUM medium = new STGMEDIUM();
try
{
//Define FileGroupDescriptorW format
FORMATETC format = new FORMATETC();
format.cfFormat = (short)GetClipboardFormat("FileGroupDescriptorW");
format.dwAspect = DVASPECT.DVASPECT_CONTENT;
format.lindex = -1;
format.ptd = IntPtr.Zero;
format.tymed = TYMED.TYMED_ISTREAM | TYMED.TYMED_ISTORAGE | TYMED.TYMED_HGLOBAL;
//Query if format exists in data
if (data.QueryGetData(format) != NativeMethods.S_OK)
{
log.Debug("No filenames found");
return null;
}
//Get data into medium
int retVal = data.GetData(format, out medium);
if (retVal != NativeMethods.S_OK)
throw new Exception(string.Format("Could not get FileGroupDescriptorW format. Error returned: {0}", retVal));
//Read medium into byte array
log.Debug("Reading structure into memory stream");
byte[] bytes;
using (MemoryStream stream = new MemoryStream())
{
DataObjectHelper.ReadMediumIntoStream(medium, stream);
bytes = new byte[stream.Length];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(bytes, 0, bytes.Length);
}
//Copy byte array into unmanaged memory
log.Debug("Copying structure into unmanaged memory");
ptrFgd = Marshal.AllocHGlobal(bytes.Length);
Marshal.Copy(bytes, 0, ptrFgd, bytes.Length);
//Marshal unmanaged memory to a FILEGROUPDESCRIPTORW struct
log.Debug("Marshaling unmanaged memory into FILEGROUPDESCRIPTORW struct");
NativeMethods.FILEGROUPDESCRIPTORW fgd = (NativeMethods.FILEGROUPDESCRIPTORW)Marshal.PtrToStructure(ptrFgd, typeof(NativeMethods.FILEGROUPDESCRIPTORW));
log.Debug(string.Format("Files found: {0}", fgd.cItems));
//Create an array to store file names
string[] filenames = new string[fgd.cItems];
//Get the pointer to the first file descriptor
IntPtr ptrFd = IntPtr.Add(ptrFgd, sizeof(uint));
//Loop for the number of files acording to the file group descriptor
for (int fdIndex = 0; fdIndex < fgd.cItems; fdIndex++)
{
log.DebugFormat("Getting filename {0}", fdIndex);
//Marshal pointer to a FILEDESCRIPTORW struct
NativeMethods.FILEDESCRIPTORW fd = (NativeMethods.FILEDESCRIPTORW)Marshal.PtrToStructure(ptrFd, typeof(NativeMethods.FILEDESCRIPTORW));
//Get filename of file descriptor and put in array
filenames[fdIndex] = fd.cFileName;
//Move the file descriptor pointer to the next file descriptor
ptrFd = IntPtr.Add(ptrFd, Marshal.SizeOf(fd));
}
log.DebugFormat("Filenames found: {0}", string.Join(", ", filenames));
return filenames;
}
finally
{
//Release all unmanaged objects
Marshal.FreeHGlobal(ptrFgd);
if (medium.pUnkForRelease == null)
NativeMethods.ReleaseStgMedium(ref medium);
}
}
internal static void ReadFileContents(NativeMethods.IDataObject data, int index, Stream stream)
{
STGMEDIUM medium = new STGMEDIUM();
try
{
//Define FileContents format
FORMATETC format = new FORMATETC();
format.cfFormat = (short)GetClipboardFormat("FileContents");
format.dwAspect = DVASPECT.DVASPECT_CONTENT;
format.lindex = index;
format.ptd = IntPtr.Zero;
format.tymed = TYMED.TYMED_ISTREAM | TYMED.TYMED_ISTORAGE | TYMED.TYMED_HGLOBAL;
//Get data
int retVal = data.GetData(format, out medium);
if (retVal != NativeMethods.S_OK)
throw new Exception(string.Format("Could not get FileContents format. Error returned: {0}", retVal));
//Read medium into stream
ReadMediumIntoStream(medium, stream);
}
finally
{
//Release all unmanaged objects
if (medium.pUnkForRelease == null)
NativeMethods.ReleaseStgMedium(ref medium);
}
}
internal static void ReadMediumIntoStream(STGMEDIUM medium, Stream stream)
{
switch (medium.tymed)
{
case TYMED.TYMED_ISTREAM:
ReadIStreamIntoStream(medium.unionmember, stream);
break;
case TYMED.TYMED_ISTORAGE:
ReadIStorageIntoStream(medium.unionmember, stream);
break;
case TYMED.TYMED_HGLOBAL:
ReadHGlobalIntoStream(medium.unionmember, stream);
break;
default:
throw new NotImplementedException(string.Format("Cannot read medium type {0}", medium.tymed));
}
}
private static void ReadIStorageIntoStream(IntPtr handle, Stream stream)
{
//To handle a IStorage it needs to be written into a second unmanaged memory mapped storage
//and then the data can be read from memory into a managed byte and returned as a MemoryStream
NativeMethods.ILockBytes iLockBytes = null;
NativeMethods.IStorage iStorageNew = null;
IntPtr ptrRead = IntPtr.Zero;
try
{
//Marshal pointer to an IStorage object
NativeMethods.IStorage iStorage = (NativeMethods.IStorage)Marshal.GetObjectForIUnknown(handle);
//Create an ILockBytes object on a HGlobal, then create a IStorage object on top of the ILockBytes object
iLockBytes = NativeMethods.CreateILockBytesOnHGlobal(IntPtr.Zero, true);
iStorageNew = NativeMethods.StgCreateDocfileOnILockBytes(iLockBytes, 0x00001012, 0);
//Copy the IStorage object into the new IStorage object
iStorage.CopyTo(0, null, IntPtr.Zero, iStorageNew);
iLockBytes.Flush();
iStorageNew.Commit(0);
//Get length of ILockBytes byte array
System.Runtime.InteropServices.ComTypes.STATSTG stat = new System.Runtime.InteropServices.ComTypes.STATSTG();
iLockBytes.Stat(out stat, 1);
long length = stat.cbSize;
//Read bytes into stream
ptrRead = Marshal.AllocCoTaskMem(sizeof(int));
byte[] buffer = new byte[4096]; //4 KB buffer
int offset = 0;
int bytesRead;
while (true)
{
iLockBytes.ReadAt(offset, buffer, buffer.Length, ptrRead);
bytesRead = Marshal.ReadInt32(ptrRead);
if (bytesRead == 0)
break;
stream.Write(buffer, 0, bytesRead);
offset += bytesRead;
}
}
finally
{
//Release all unmanaged objects
Marshal.FreeCoTaskMem(ptrRead);
if (iStorageNew != null)
Marshal.ReleaseComObject(iStorageNew);
if (iLockBytes != null)
Marshal.ReleaseComObject(iLockBytes);
}
}
private static void ReadIStreamIntoStream(IntPtr handle, Stream stream)
{
IntPtr ptrRead = IntPtr.Zero;
try
{
//Marshal pointer to an IStream object
IStream iStream = (IStream)Marshal.GetObjectForIUnknown(handle);
//Create pointer to integer that stores # of bytes read
ptrRead = Marshal.AllocCoTaskMem(sizeof(int));
//Copy IStream into managed stream in chunks
byte[] buffer = new byte[4096]; //4 KB buffer
int bytesRead;
while (true)
{
iStream.Read(buffer, buffer.Length, ptrRead);
bytesRead = Marshal.ReadInt32(ptrRead);
if (bytesRead == 0)
break;
else
stream.Write(buffer, 0, bytesRead);
}
}
finally
{
//Release all unmanaged objects
Marshal.FreeCoTaskMem(ptrRead);
}
}
private static void ReadHGlobalIntoStream(IntPtr handle, Stream stream)
{
//Lock HGlobal so it cannot be moved or discarded
IntPtr source = NativeMethods.GlobalLock(handle);
if (source == IntPtr.Zero)
throw new Exception(string.Format("Unable to lock hglobal {0}", source.ToString()));
try
{
//Get size of HGlobal
int length = NativeMethods.GlobalSize(handle);
//Copy HGlobal into managed stream in chunks
byte[] buffer = new byte[4096]; //4 KB buffer
int bytesToCopy;
for(int offset = 0; offset < length; offset += buffer.Length)
{
//Copy buffer length or remaining length, whichever is smaller
bytesToCopy = Math.Min(buffer.Length, length - offset);
Marshal.Copy(source, buffer, 0, bytesToCopy);
stream.Write(buffer, 0, bytesToCopy);
}
}
finally
{
//Release all unmanaged objects
NativeMethods.GlobalUnlock(handle);
}
}
}
}
================================================
FILE: OutlookFileDrag/DragDropHook.cs
================================================
using System;
using EasyHook;
using log4net;
namespace OutlookFileDrag
{
class DragDropHook : IDisposable
{
private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private LocalHook hook;
private bool disposed = false;
private bool isHooked = false;
public DragDropHook()
{
try
{
//Hook OLE drag and drop event
log.Info("Creating hook for DoDragDrop method of ole32.dll");
hook = EasyHook.LocalHook.Create(EasyHook.LocalHook.GetProcAddress("ole32.dll", "DoDragDrop"),
new NativeMethods.DragDropDelegate(DragDropHook.DoDragDropHook), null);
}
catch (Exception ex)
{
log.Error("Error creating hook", ex);
throw;
}
}
public bool IsHooked
{
get
{
return isHooked;
}
}
public void Start()
{
try
{
if (isHooked)
return;
log.Info("Starting hook");
//Hook current (UI) thread
hook.ThreadACL.SetInclusiveACL(new Int32[] { 0 });
isHooked = true;
}
catch (Exception ex)
{
log.Error("Error starting hook", ex);
throw;
}
}
public void Stop()
{
try
{
if (!isHooked)
return;
log.Info("Stopping hook");
//Stop hooking all threads
hook.ThreadACL.SetInclusiveACL(new Int32[] { });
isHooked = false;
log.Info("Stopped hook");
}
catch (Exception ex)
{
log.Error("Error stopping hook", ex);
throw;
}
}
public static int DoDragDropHook(NativeMethods.IDataObject pDataObj, IntPtr pDropSource, uint dwOKEffects, out uint pdwEffect)
{
try
{
log.Info("Drag started");
if (!DataObjectHelper.GetDataPresent(pDataObj, "FileGroupDescriptorW") && !DataObjectHelper.GetDataPresent(pDataObj, "FileGroupDescriptor"))
{
log.Info("No virtual files found -- continuing original drag");
return NativeMethods.DoDragDrop(pDataObj, pDropSource, dwOKEffects, out pdwEffect);
}
//Start new drag
log.Info("Virtual files found -- starting new drag adding CF_HDROP format");
log.InfoFormat("Files: {0}", string.Join(",", DataObjectHelper.GetFilenames(pDataObj)));
OutlookDataObject newDataObj = new OutlookDataObject(pDataObj);
int result = NativeMethods.DoDragDrop(newDataObj, pDropSource, dwOKEffects, out pdwEffect);
//If files were dropped and drop effect was "move", then override to "copy" so original item is not deleted
if (newDataObj.FilesDropped && pdwEffect == NativeMethods.DROPEFFECT_MOVE)
pdwEffect = NativeMethods.DROPEFFECT_COPY;
//Get result
log.InfoFormat("DoDragDrop effect: {0} result: {1}", pdwEffect, result);
return result;
}
catch (Exception ex)
{
log.Warn("Dragging error", ex);
pdwEffect = NativeMethods.DROPEFFECT_NONE;
return NativeMethods.DRAGDROP_S_CANCEL;
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposed)
return;
if (disposing)
{
hook.Dispose();
}
disposed = true;
}
}
}
================================================
FILE: OutlookFileDrag/FileUtility.cs
================================================
using System;
using System.IO;
using log4net;
namespace OutlookFileDrag
{
static class FileUtility
{
private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public static string GetTempPath()
{
log.Debug("Getting temp path");
string path = Path.Combine(Path.GetTempPath(), "OutlookFileDrag", Guid.NewGuid().ToString());
if (!System.IO.Directory.Exists(path))
System.IO.Directory.CreateDirectory(path);
log.DebugFormat("Temp path: {0}", path);
return path;
}
public static void CleanupTempPath(int tempFileExpiration)
{
log.Debug("Cleaning up temp path");
string path = Path.Combine(Path.GetTempPath(), "OutlookFileDrag");
log.InfoFormat("Temp path: {0}", path);
if (!System.IO.Directory.Exists(path))
{
log.Info("Temp path does not exist");
return;
}
var dirInfo = new DirectoryInfo(path);
foreach(DirectoryInfo subfolder in dirInfo.GetDirectories())
{
//If folder was created before expiration window, delete it
if (subfolder.CreationTime < DateTime.Now.AddMinutes(tempFileExpiration))
try
{
log.InfoFormat("Deleting temp folder: {0}", subfolder.FullName);
subfolder.Delete(true);
}
catch
{
log.WarnFormat("Could not delete temp folder: {0}", subfolder.FullName);
}
}
}
public static string GetUniqueFilename(string filename)
{
string filenameNoExt;
string ext;
//If filename is too long, truncate filename
if (filename.Length >= NativeMethods.MAX_PATH)
{
ext = Path.GetExtension(filename);
filename = filename.Substring(0, NativeMethods.MAX_PATH - ext.Length - 1) + ext;
}
//If file does not exist, use original filename
if (!File.Exists(filename))
return filename;
//Try appending number to filename until unique filename is found
filenameNoExt = Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename));
ext = Path.GetExtension(filename);
for (int index = 1; index < 1024; index++)
{
string newFilename = string.Format("{0} ({1}){2}", filenameNoExt, index, ext);
//If new filename is too long, truncate new filename
if (newFilename.Length > NativeMethods.MAX_PATH)
{
newFilename = string.Format("{0} ({1}){2}", filenameNoExt.Substring(0, NativeMethods.MAX_PATH - ext.Length - 8), index, ext);
}
if (!File.Exists(newFilename))
return newFilename;
}
//If no unique filename could be found, throw exception
throw new Exception(string.Format("Could not generate unique filename for file {0}", filename));
}
}
}
================================================
FILE: OutlookFileDrag/FormatEtcEnumerator.cs
================================================
using System.Runtime.InteropServices.ComTypes;
namespace OutlookFileDrag
{
class FormatEtcEnumerator : IEnumFORMATETC
{
private FORMATETC[] formats;
private int index = 0;
public FormatEtcEnumerator(FORMATETC[] formats)
{
this.formats = formats;
}
public void Clone(out IEnumFORMATETC newEnum)
{
//Create new enumerators
newEnum = new FormatEtcEnumerator(formats);
}
public int Next(int celt, FORMATETC[] rgelt, int[] pceltFetched)
{
//Fetch number of requested formats
int fetchCount = 0;
for (int i = 0; i < celt; i++)
{
//If index is past end of formats, stop
if (index > formats.Length - 1)
break;
//Set format
rgelt[i] = formats[index];
fetchCount++;
index++;
}
//Set number of formats fetched
if (pceltFetched != null && pceltFetched.Length > 0)
pceltFetched[0] = fetchCount;
//Return S_OK if all requested formats were returned; otherwise, return S_FALSE
return (fetchCount == celt ? NativeMethods.S_OK : NativeMethods.S_FALSE);
}
public int Reset()
{
//Set format index back to 0
index = 0;
return NativeMethods.S_OK;
}
public int Skip(int celt)
{
//Check if incremented index is past end of formats
if (index + celt > formats.Length - 1)
return NativeMethods.S_FALSE;
else
{
//Increment index and return
index += celt;
return NativeMethods.S_OK;
}
}
}
}
================================================
FILE: OutlookFileDrag/NativeMethods.cs
================================================
using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
namespace OutlookFileDrag
{
static class NativeMethods
{
public const int S_OK = 0;
public const int S_FALSE = 1;
public const short CF_TEXT = 1;
public const short CF_UNICODETEXT = 13;
public const short CF_HDROP = 15;
public const int DATA_S_SAMEFORMATETC = 0x00040130;
public const int DRAGDROP_S_DROP = 0x00040100;
public const int DRAGDROP_S_CANCEL = 0x00040101;
public const int DRAGDROP_S_USEDEFAULTCURSORS = 0x00040102;
public const uint DROPEFFECT_NONE = 0;
public const uint DROPEFFECT_COPY = 1;
public const uint DROPEFFECT_MOVE = 2;
public const uint DROPEFFECT_LINK = 4;
public const uint DROPEFFECT_SCROLL = 0x80000000;
public const int DV_E_LINDEX = unchecked((int)0x80040068);
public const int DV_E_FORMATETC = unchecked((int)0x80040064);
public const int DV_E_TYMED = unchecked((int)0x80040069);
public const int DV_E_DVASPECT = unchecked((int)0x8004006B);
public const int E_INVALIDARG = unchecked((int)0x80070057);
public const int E_FAIL = unchecked((int)0x80004005);
public const int E_NOTIMPL = unchecked((int)0x80004001);
public const int E_OUTOFMEMORY = unchecked((int)0x8007000E);
public const int E_UNSPEC = E_FAIL;
public const int E_UNEXPECTED = unchecked((int)0x8000FFFF);
public const int MAX_PATH = 260;
[DllImport("ole32.dll")]
public static extern int DoDragDrop(NativeMethods.IDataObject pDataObj, IntPtr pDropSource, uint dwOKEffects, out uint pdwEffect);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GlobalLock(IntPtr handle);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern bool GlobalUnlock(IntPtr handle);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GlobalSize(IntPtr handle);
[DllImport("ole32.dll", PreserveSig = false)]
public static extern ILockBytes CreateILockBytesOnHGlobal(IntPtr hGlobal, bool fDeleteOnRelease);
[DllImport("ole32.dll", CharSet = CharSet.Unicode, PreserveSig = false)]
public static extern IStorage StgCreateDocfileOnILockBytes(ILockBytes plkbyt, uint grfMode, uint reserved);
[DllImport("ole32.dll")]
internal static extern void ReleaseStgMedium(ref STGMEDIUM medium);
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("0000000B-0000-0000-C000-000000000046")]
public interface IStorage
{
[return: MarshalAs(UnmanagedType.Interface)]
IStream CreateStream([In, MarshalAs(UnmanagedType.BStr)] string pwcsName, [In, MarshalAs(UnmanagedType.U4)] int grfMode, [In, MarshalAs(UnmanagedType.U4)] int reserved1, [In, MarshalAs(UnmanagedType.U4)] int reserved2);
[return: MarshalAs(UnmanagedType.Interface)]
IStream OpenStream([In, MarshalAs(UnmanagedType.BStr)] string pwcsName, IntPtr reserved1, [In, MarshalAs(UnmanagedType.U4)] int grfMode, [In, MarshalAs(UnmanagedType.U4)] int reserved2);
[return: MarshalAs(UnmanagedType.Interface)]
IStorage CreateStorage([In, MarshalAs(UnmanagedType.BStr)] string pwcsName, [In, MarshalAs(UnmanagedType.U4)] int grfMode, [In, MarshalAs(UnmanagedType.U4)] int reserved1, [In, MarshalAs(UnmanagedType.U4)] int reserved2);
[return: MarshalAs(UnmanagedType.Interface)]
IStorage OpenStorage([In, MarshalAs(UnmanagedType.BStr)] string pwcsName, IntPtr pstgPriority, [In, MarshalAs(UnmanagedType.U4)] int grfMode, IntPtr snbExclude, [In, MarshalAs(UnmanagedType.U4)] int reserved);
void CopyTo(int ciidExclude, [In, MarshalAs(UnmanagedType.LPArray)] Guid[] pIIDExclude, IntPtr snbExclude, [In, MarshalAs(UnmanagedType.Interface)] IStorage stgDest);
void MoveElementTo([In, MarshalAs(UnmanagedType.BStr)] string pwcsName, [In, MarshalAs(UnmanagedType.Interface)] IStorage stgDest, [In, MarshalAs(UnmanagedType.BStr)] string pwcsNewName, [In, MarshalAs(UnmanagedType.U4)] int grfFlags);
void Commit(int grfCommitFlags);
void Revert();
void EnumElements([In, MarshalAs(UnmanagedType.U4)] int reserved1, IntPtr reserved2, [In, MarshalAs(UnmanagedType.U4)] int reserved3, [MarshalAs(UnmanagedType.Interface)] out object ppVal);
void DestroyElement([In, MarshalAs(UnmanagedType.BStr)] string pwcsName);
void RenameElement([In, MarshalAs(UnmanagedType.BStr)] string pwcsOldName, [In, MarshalAs(UnmanagedType.BStr)] string pwcsNewName);
void SetElementTimes([In, MarshalAs(UnmanagedType.BStr)] string pwcsName, [In] System.Runtime.InteropServices.ComTypes.FILETIME pctime, [In] System.Runtime.InteropServices.ComTypes.FILETIME patime, [In] System.Runtime.InteropServices.ComTypes.FILETIME pmtime);
void SetClass([In] ref Guid clsid);
void SetStateBits(int grfStateBits, int grfMask);
void Stat([Out]out System.Runtime.InteropServices.ComTypes.STATSTG pStatStg, int grfStatFlag);
}
[ComImport, Guid("0000000A-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ILockBytes
{
void ReadAt([In, MarshalAs(UnmanagedType.U8)] long ulOffset, [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] pv, [In, MarshalAs(UnmanagedType.U4)] int cb, IntPtr pcbRead);
void WriteAt([In, MarshalAs(UnmanagedType.U8)] long ulOffset, IntPtr pv, [In, MarshalAs(UnmanagedType.U4)] int cb, [Out, MarshalAs(UnmanagedType.LPArray)] int[] pcbWritten);
void Flush();
void SetSize([In, MarshalAs(UnmanagedType.U8)] long cb);
void LockRegion([In, MarshalAs(UnmanagedType.U8)] long libOffset, [In, MarshalAs(UnmanagedType.U8)] long cb, [In, MarshalAs(UnmanagedType.U4)] int dwLockType);
void UnlockRegion([In, MarshalAs(UnmanagedType.U8)] long libOffset, [In, MarshalAs(UnmanagedType.U8)] long cb, [In, MarshalAs(UnmanagedType.U4)] int dwLockType);
void Stat([Out]out System.Runtime.InteropServices.ComTypes.STATSTG pstatstg, [In, MarshalAs(UnmanagedType.U4)] int grfStatFlag);
}
[ComImport, Guid("0000010E-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IDataObject
{
[PreserveSig]
int GetData([In] ref FORMATETC format, out STGMEDIUM medium);
[PreserveSig]
int GetDataHere([In] ref FORMATETC format, ref STGMEDIUM medium);
[PreserveSig]
int QueryGetData([In] ref FORMATETC format);
[PreserveSig]
int GetCanonicalFormatEtc([In] ref FORMATETC formatIn, out FORMATETC formatOut);
[PreserveSig]
int SetData([In] ref FORMATETC formatIn, [In] ref STGMEDIUM medium, [MarshalAs(UnmanagedType.Bool)] bool release);
[PreserveSig]
int EnumFormatEtc(DATADIR direction, out System.Runtime.InteropServices.ComTypes.IEnumFORMATETC ppenumFormatEtc);
[PreserveSig]
int DAdvise([In] ref FORMATETC pFormatetc, ADVF advf, IAdviseSink adviseSink, out int connection);
[PreserveSig]
int DUnadvise(int connection);
[PreserveSig]
int EnumDAdvise(out IEnumSTATDATA enumAdvise);
}
[ComImport, Guid("00000121-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IDropSource
{
[PreserveSig]
int QueryContinueDrag([MarshalAs(UnmanagedType.Bool)] bool fEscapePressed, int grfKeyState);
[PreserveSig]
int GiveFeedback(int dwEffect);
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public sealed class FILEGROUPDESCRIPTORA
{
public uint cItems;
//public FILEDESCRIPTORA[] fgd;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public sealed class FILEDESCRIPTORA
{
public uint dwFlags;
public Guid clsid;
public SIZEL sizel;
public POINTL pointl;
public uint dwFileAttributes;
public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime;
public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime;
public System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime;
public uint nFileSizeHigh;
public uint nFileSizeLow;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string cFileName;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public sealed class FILEGROUPDESCRIPTORW
{
public uint cItems;
//public FILEDESCRIPTORW[] fgd;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public sealed class FILEDESCRIPTORW
{
public uint dwFlags;
public Guid clsid;
public SIZEL sizel;
public POINTL pointl;
public uint dwFileAttributes;
public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime;
public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime;
public System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime;
public uint nFileSizeHigh;
public uint nFileSizeLow;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string cFileName;
}
[StructLayout(LayoutKind.Sequential)]
public sealed class POINTL
{
public int x;
public int y;
}
[StructLayout(LayoutKind.Sequential)]
public sealed class SIZEL
{
public int cx;
public int cy;
}
[StructLayout(LayoutKind.Sequential)]
public sealed class DROPFILES
{
public int pFiles;
public int X;
public int Y;
public bool fNC;
public bool fWide;
}
[UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = true)]
[return: MarshalAs(UnmanagedType.I4)]
public delegate int DragDropDelegate(NativeMethods.IDataObject pDataObj, IntPtr pDropSource, uint dwOKEffects, out uint pdwEffect);
}
}
================================================
FILE: OutlookFileDrag/OutlookDataObject.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using log4net;
namespace OutlookFileDrag
{
//Class that wraps Outlook data object and adds support for CF_HDROP format
class OutlookDataObject : NativeMethods.IDataObject, ICustomQueryInterface
{
private NativeMethods.IDataObject innerData;
private string[] tempFilenames;
private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public bool FilesDropped { get; private set; }
public OutlookDataObject(NativeMethods.IDataObject innerData)
{
this.innerData = innerData;
}
public int EnumFormatEtc(DATADIR direction, out IEnumFORMATETC ppenumFormatEtc)
{
IEnumFORMATETC origEnum = null;
try
{
log.DebugFormat("IDataObject.EnumFormatEtc called -- direction {0}", direction);
switch (direction)
{
case DATADIR.DATADIR_GET:
//Get original enumerator
int result = innerData.EnumFormatEtc(direction, out origEnum);
if (result != NativeMethods.S_OK)
{
ppenumFormatEtc = null;
return result;
}
//Enumerate original formats
List formats = new List();
FORMATETC[] buffer = new FORMATETC[] { new FORMATETC() };
while (origEnum.Next(1, buffer, null) == NativeMethods.S_OK)
{
//Convert format from short to unsigned short
ushort cfFormat = (ushort) buffer[0].cfFormat;
//Do not return text formats -- some applications try to get text before files
if (cfFormat != NativeMethods.CF_TEXT && cfFormat != NativeMethods.CF_UNICODETEXT && cfFormat != (ushort)DataObjectHelper.GetClipboardFormat("Csv"))
formats.Add(buffer[0]);
}
//Add CF_HDROP format
FORMATETC format = new FORMATETC();
format.cfFormat = NativeMethods.CF_HDROP;
format.dwAspect = DVASPECT.DVASPECT_CONTENT;
format.lindex = -1;
format.ptd = IntPtr.Zero;
format.tymed = TYMED.TYMED_HGLOBAL;
formats.Add(format);
//Return new enumerator for available formats
ppenumFormatEtc = new FormatEtcEnumerator(formats.ToArray());
return NativeMethods.S_OK;
case DATADIR.DATADIR_SET:
//Return original enumerator
return innerData.EnumFormatEtc(direction, out ppenumFormatEtc);
default:
//Invalid direction
ppenumFormatEtc = null;
return NativeMethods.E_INVALIDARG;
}
}
catch (Exception ex)
{
log.Error("Exception in IDataObject.EnumFormatEtc", ex);
ppenumFormatEtc = null;
return NativeMethods.E_UNEXPECTED;
}
finally
{
//Release all unmanaged objects
if (origEnum != null)
Marshal.ReleaseComObject(origEnum);
}
}
public int GetCanonicalFormatEtc(ref FORMATETC formatIn, out FORMATETC formatOut)
{
try
{
log.DebugFormat("IDataObject.GetCanonicalFormatEtc called -- cfFormat {0} dwAspect {1} lindex {2} ptd {3} tymed {4}", formatIn.cfFormat, formatIn.dwAspect, formatIn.lindex, formatIn.ptd, formatIn.tymed);
if (formatIn.cfFormat == NativeMethods.CF_HDROP)
{
//Copy input format to output format
formatOut = new FORMATETC();
formatOut.cfFormat = formatIn.cfFormat;
formatOut.dwAspect = formatIn.dwAspect;
formatOut.lindex = formatIn.lindex;
formatOut.ptd = IntPtr.Zero;
formatOut.tymed = formatIn.tymed;
return NativeMethods.DATA_S_SAMEFORMATETC;
}
else
return innerData.GetCanonicalFormatEtc(formatIn, out formatOut);
}
catch (Exception ex)
{
log.Error("Exception in IDataObject.GetCanonicalFormatEtc", ex);
formatOut = new FORMATETC();
return NativeMethods.E_UNEXPECTED;
}
}
public int GetData(ref FORMATETC format, out STGMEDIUM medium)
{
try
{
//Get data into passed medium
log.DebugFormat("IDataObject.GetData called -- cfFormat {0} dwAspect {1} lindex {2} ptd {3} tymed {4}", format.cfFormat, format.dwAspect, format.lindex, format.ptd, format.tymed);
log.DebugFormat("Format name: {0}", System.Windows.Forms.DataFormats.GetFormat((ushort)format.cfFormat).Name);
if (format.cfFormat == NativeMethods.CF_HDROP)
{
medium = new STGMEDIUM();
//Validate index
if (format.lindex != -1)
return NativeMethods.DV_E_LINDEX;
//Validate medium type
if (!format.tymed.HasFlag(TYMED.TYMED_HGLOBAL))
return NativeMethods.DV_E_TYMED;
//Validate DV aspect
if (format.dwAspect != DVASPECT.DVASPECT_CONTENT)
return NativeMethods.DV_E_DVASPECT;
//Extract files if not already extracted
if (tempFilenames == null)
ExtractFiles();
//Get list of dropped files
log.Debug("Setting drop files");
DataObjectHelper.SetDropFiles(ref medium, tempFilenames);
FilesDropped = true;
return NativeMethods.S_OK;
}
else if (format.cfFormat == NativeMethods.CF_TEXT || format.cfFormat == NativeMethods.CF_UNICODETEXT || format.cfFormat == (ushort)DataObjectHelper.GetClipboardFormat("Csv"))
{
//Do not return text formats -- some applications try to get text before files
medium = new STGMEDIUM();
return NativeMethods.DV_E_FORMATETC;
}
else
{
int result = innerData.GetData(format, out medium);
log.DebugFormat("Result: {0}", result);
return result;
}
}
catch (Exception ex)
{
log.Error("Exception in IDataObject.GetData", ex);
medium = new STGMEDIUM();
return NativeMethods.E_UNEXPECTED;
}
}
public int GetDataHere(ref FORMATETC format, ref STGMEDIUM medium)
{
log.DebugFormat("IDataObject.QueryGetData called -- cfFormat {0} dwAspect {1} lindex {2} ptd {3} tymed {4}", format.cfFormat, format.dwAspect, format.lindex, format.ptd, format.tymed);
return NativeMethods.E_NOTIMPL;
}
public int QueryGetData(ref FORMATETC format)
{
try
{
log.DebugFormat("IDataObject.QueryGetData called -- cfFormat {0} dwAspect {1} lindex {2} ptd {3} tymed {4}", format.cfFormat, format.dwAspect, format.lindex, format.ptd, format.tymed);
log.DebugFormat("Format name: {0}", System.Windows.Forms.DataFormats.GetFormat((ushort)format.cfFormat).Name);
if (format.cfFormat == NativeMethods.CF_HDROP)
{
//Validate index
if (format.lindex != -1)
return NativeMethods.DV_E_LINDEX;
//Validate medium type
if (!format.tymed.HasFlag(TYMED.TYMED_HGLOBAL))
return NativeMethods.DV_E_TYMED;
//Validate DV aspect
if (format.dwAspect != DVASPECT.DVASPECT_CONTENT)
return NativeMethods.DV_E_DVASPECT;
log.DebugFormat("IDataObject.QueryGetData result: {0}", NativeMethods.S_OK);
return NativeMethods.S_OK;
}
else if (format.cfFormat == NativeMethods.CF_TEXT || format.cfFormat == NativeMethods.CF_UNICODETEXT || format.cfFormat == (ushort)DataObjectHelper.GetClipboardFormat("Csv"))
{
//Do not return text formats -- some applications try to get text before files
return NativeMethods.DV_E_FORMATETC;
}
else
{
int result = innerData.QueryGetData(format);
log.DebugFormat("Result: {0}", result);
return result;
}
}
catch (Exception ex)
{
log.Error("Exception in IDataObject.QueryGetData", ex);
return NativeMethods.E_UNEXPECTED;
}
}
public int SetData(ref FORMATETC formatIn, ref STGMEDIUM medium, bool release)
{
try
{
log.DebugFormat("IDataObject.SetData called -- cfFormat {0} dwAspect {1} lindex {2} ptd {3} tymed {4}", formatIn.cfFormat, formatIn.dwAspect, formatIn.lindex, formatIn.ptd, formatIn.tymed);
log.DebugFormat("Format name: {0}", System.Windows.Forms.DataFormats.GetFormat((ushort)formatIn.cfFormat).Name);
int result = innerData.SetData(formatIn, medium, release);
log.DebugFormat("Result: {0}", result);
return result;
}
catch (Exception ex)
{
log.Error("Exception in IDataObject.SetData", ex);
return NativeMethods.E_UNEXPECTED;
}
}
public int DAdvise(ref FORMATETC pFormatetc, ADVF advf, IAdviseSink adviseSink, out int connection)
{
return innerData.DAdvise(pFormatetc, advf, adviseSink, out connection);
}
public int DUnadvise(int connection)
{
return innerData.DUnadvise(connection);
}
public int EnumDAdvise(out IEnumSTATDATA enumAdvise)
{
return innerData.EnumDAdvise(out enumAdvise);
}
private void ExtractFiles()
{
//Get filenames being dragged
log.Debug("Getting filenames");
string[] filenames = DataObjectHelper.GetFilenames(this.innerData);
log.DebugFormat("Filenames: {0}", string.Join(",", filenames));
//Get temporary folder
log.Debug("Creating temp folder");
string tempPath = FileUtility.GetTempPath();
log.DebugFormat("Temp folder: {0}", tempPath);
//Save files to temporary directory
tempFilenames = new string[filenames.Length];
for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++)
{
tempFilenames[fileIndex] = FileUtility.GetUniqueFilename(Path.Combine(tempPath, filenames[fileIndex]));
log.DebugFormat("Extracting file {0}", filenames[fileIndex]);
using (FileStream fs = new FileStream(tempFilenames[fileIndex], FileMode.Create))
{
DataObjectHelper.ReadFileContents(this.innerData, fileIndex, fs);
}
}
}
public CustomQueryInterfaceResult GetInterface(ref Guid iid, out IntPtr ppv)
{
ppv = IntPtr.Zero;
try
{
log.DebugFormat("Get COM interface {0}", iid);
//For IDataObject interface, use interface on this object
if (iid == new Guid("0000010E-0000-0000-C000-000000000046"))
{
log.DebugFormat("Interface handled");
return CustomQueryInterfaceResult.NotHandled;
}
else
{
//For all other interfaces, use interface on original object
IntPtr pUnk = Marshal.GetIUnknownForObject(this.innerData);
int retVal = Marshal.QueryInterface(pUnk, ref iid, out ppv);
if (retVal == NativeMethods.S_OK)
{
log.DebugFormat("Interface handled by inner object");
return CustomQueryInterfaceResult.Handled;
}
else
{
log.DebugFormat("Interface not handled by inner object");
return CustomQueryInterfaceResult.Failed;
}
}
}
catch (Exception ex)
{
log.Error("Exception in ICustomQueryInterface", ex);
return CustomQueryInterfaceResult.Failed;
}
}
}
}
================================================
FILE: OutlookFileDrag/OutlookDragSource.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using log4net;
namespace OutlookFileDrag
{
class OutlookDragSource : NativeMethods.IDropSource, ICustomQueryInterface
{
private IntPtr innerData;
private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public OutlookDragSource(IntPtr innerData)
{
this.innerData = innerData;
}
public CustomQueryInterfaceResult GetInterface(ref Guid iid, out IntPtr ppv)
{
ppv = IntPtr.Zero;
try
{
log.DebugFormat("Get COM interface {0}", iid);
//For all other interfaces, use interface on original object
//IntPtr pUnk = Marshal.GetIUnknownForObject(this.innerData);
IntPtr pUnk = this.innerData;
int retVal = Marshal.QueryInterface(pUnk, ref iid, out ppv);
if (retVal == NativeMethods.S_OK)
{
log.DebugFormat("Interface handled by inner object");
return CustomQueryInterfaceResult.Handled;
}
else
{
log.DebugFormat("Interface not handled by inner object");
return CustomQueryInterfaceResult.Failed;
}
}
catch (Exception ex)
{
log.Error("Exception in ICustomQueryInterface", ex);
return CustomQueryInterfaceResult.Failed;
}
}
public int QueryContinueDrag([MarshalAs(UnmanagedType.Bool)] bool fEscapePressed, int grfKeyState)
{
throw new NotImplementedException();
}
public int GiveFeedback(int dwEffect)
{
throw new NotImplementedException();
}
}
}
================================================
FILE: OutlookFileDrag/OutlookFileDrag.csproj
================================================
{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
Debug
AnyCPU
{88E6522A-C68B-42C8-8B5E-9C959BA6C415}
Library
false
OutlookFileDrag
OutlookFileDrag
v4.0
VSTO40
true
publish\
en
1.0.0.0
true
true
7
days
False
OutlookFileDrag
OutlookFileDrag
3
False
Microsoft .NET Framework 4 %28x86 and x64%29
true
False
.NET Framework 3.5 SP1
false
False
Microsoft Visual Studio 2010 Tools for Office Runtime %28x86 and x64%29
true
False
Windows Installer 4.5
true
Outlook
true
full
false
bin\Debug\
false
$(DefineConstants);DEBUG;TRACE
4
AnyCPU
pdbonly
true
bin\Release\
false
$(DefineConstants);TRACE
4
..\packages\EasyHook.2.7.6578.1\lib\net40\EasyHook.dll
True
..\packages\log4net.2.0.8\lib\net40-full\log4net.dll
True
True
True
False
true
False
True
False
Code
Designer
Designer
Code
ThisAddIn.cs
ThisAddIn.Designer.xml
PreserveNewest
PreserveNewest
10.0
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
true
6EA39ECAD013020F956462F4CBF07570C217A1CF
================================================
FILE: OutlookFileDrag/Properties/AssemblyInfo.cs
================================================
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Outlook File Drag")]
[assembly: AssemblyDescription("Drag and drop Outlook items and attachments as files into any application")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Tony Federer")]
[assembly: AssemblyProduct("Outlook File Drag")]
[assembly: AssemblyCopyright("Copyright © 2019-2020 Tony Federer")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("282559d2-06f7-407f-9007-89f9e6fa5aa4")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.11.0")]
[assembly: AssemblyFileVersion("1.0.11.0")]
================================================
FILE: OutlookFileDrag/ThisAddIn.Designer.cs
================================================
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
//------------------------------------------------------------------------------
#pragma warning disable 414
namespace OutlookFileDrag {
///
[Microsoft.VisualStudio.Tools.Applications.Runtime.StartupObjectAttribute(0)]
[global::System.Security.Permissions.PermissionSetAttribute(global::System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]
public sealed partial class ThisAddIn : Microsoft.Office.Tools.Outlook.OutlookAddInBase {
internal Microsoft.Office.Tools.CustomTaskPaneCollection CustomTaskPanes;
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
private global::System.Object missing = global::System.Type.Missing;
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
internal Microsoft.Office.Interop.Outlook.Application Application;
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
public ThisAddIn(global::Microsoft.Office.Tools.Outlook.Factory factory, global::System.IServiceProvider serviceProvider) :
base(factory, serviceProvider, "AddIn", "ThisAddIn") {
Globals.Factory = factory;
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
protected override void Initialize() {
base.Initialize();
this.Application = this.GetHostItem(typeof(Microsoft.Office.Interop.Outlook.Application), "Application");
Globals.ThisAddIn = this;
global::System.Windows.Forms.Application.EnableVisualStyles();
this.InitializeCachedData();
this.InitializeControls();
this.InitializeComponents();
this.InitializeData();
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
protected override void FinishInitialization() {
this.InternalStartup();
this.OnStartup();
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
protected override void InitializeDataBindings() {
this.BeginInitialization();
this.BindToData();
this.EndInitialization();
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void InitializeCachedData() {
if ((this.DataHost == null)) {
return;
}
if (this.DataHost.IsCacheInitialized) {
this.DataHost.FillCachedData(this);
}
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void InitializeData() {
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void BindToData() {
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
private void StartCaching(string MemberName) {
this.DataHost.StartCaching(this, MemberName);
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
private void StopCaching(string MemberName) {
this.DataHost.StopCaching(this, MemberName);
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
private bool IsCached(string MemberName) {
return this.DataHost.IsCached(this, MemberName);
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void BeginInitialization() {
this.BeginInit();
this.CustomTaskPanes.BeginInit();
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void EndInitialization() {
this.CustomTaskPanes.EndInit();
this.EndInit();
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void InitializeControls() {
this.CustomTaskPanes = Globals.Factory.CreateCustomTaskPaneCollection(null, null, "CustomTaskPanes", "CustomTaskPanes", this);
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
private void InitializeComponents() {
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
private bool NeedsFill(string MemberName) {
return this.DataHost.NeedsFill(this, MemberName);
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
protected override void OnShutdown() {
this.CustomTaskPanes.Dispose();
base.OnShutdown();
}
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
internal sealed partial class Globals {
///
private Globals() {
}
private static ThisAddIn _ThisAddIn;
private static global::Microsoft.Office.Tools.Outlook.Factory _factory;
private static ThisRibbonCollection _ThisRibbonCollection;
private static ThisFormRegionCollection _ThisFormRegionCollection;
internal static ThisAddIn ThisAddIn {
get {
return _ThisAddIn;
}
set {
if ((_ThisAddIn == null)) {
_ThisAddIn = value;
}
else {
throw new System.NotSupportedException();
}
}
}
internal static global::Microsoft.Office.Tools.Outlook.Factory Factory {
get {
return _factory;
}
set {
if ((_factory == null)) {
_factory = value;
}
else {
throw new System.NotSupportedException();
}
}
}
internal static ThisRibbonCollection Ribbons {
get {
if ((_ThisRibbonCollection == null)) {
_ThisRibbonCollection = new ThisRibbonCollection(_factory.GetRibbonFactory());
}
return _ThisRibbonCollection;
}
}
internal static ThisFormRegionCollection FormRegions {
get {
if ((_ThisFormRegionCollection == null)) {
_ThisFormRegionCollection = new ThisFormRegionCollection(Globals.ThisAddIn.GetFormRegions());
}
return _ThisFormRegionCollection;
}
}
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")]
internal sealed partial class ThisRibbonCollection : Microsoft.Office.Tools.Ribbon.RibbonCollectionBase {
///
internal ThisRibbonCollection(global::Microsoft.Office.Tools.Ribbon.RibbonFactory factory) :
base(factory) {
}
internal ThisRibbonCollection this[Microsoft.Office.Interop.Outlook.Inspector inspector] {
get {
return this.GetRibbonContextCollection(inspector);
}
}
internal ThisRibbonCollection this[Microsoft.Office.Interop.Outlook.Explorer explorer] {
get {
return this.GetRibbonContextCollection(explorer);
}
}
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
internal sealed partial class ThisFormRegionCollection : Microsoft.Office.Tools.Outlook.FormRegionCollectionBase {
///
public ThisFormRegionCollection(System.Collections.Generic.IList list) :
base(list) {
}
internal WindowFormRegionCollection this[Microsoft.Office.Interop.Outlook.Explorer explorer] {
get {
return ((WindowFormRegionCollection)(Globals.ThisAddIn.GetFormRegions(explorer, typeof(WindowFormRegionCollection))));
}
}
internal WindowFormRegionCollection this[Microsoft.Office.Interop.Outlook.Inspector inspector] {
get {
return ((WindowFormRegionCollection)(Globals.ThisAddIn.GetFormRegions(inspector, typeof(WindowFormRegionCollection))));
}
}
}
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
internal sealed partial class WindowFormRegionCollection : Microsoft.Office.Tools.Outlook.FormRegionCollectionBase {
///
public WindowFormRegionCollection(System.Collections.Generic.IList list) :
base(list) {
}
}
}
================================================
FILE: OutlookFileDrag/ThisAddIn.Designer.xml
================================================
================================================
FILE: OutlookFileDrag/ThisAddIn.cs
================================================
using System;
using System.Reflection;
using log4net;
namespace OutlookFileDrag
{
public partial class ThisAddIn
{
private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private System.Threading.Timer cleanupTimer;
private DragDropHook hook;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
//Configure logging
log4net.Config.XmlConfigurator.Configure();
try
{
log.Info("Add-in startup");
//Log version, OS version, Outlook version, and language
log.InfoFormat("Version: {0}", Assembly.GetExecutingAssembly().GetName().Version.ToString());
log.InfoFormat("OS: {0} {1}", Environment.OSVersion, Environment.Is64BitOperatingSystem ? "x64" : "x86");
log.InfoFormat("Outlook version: {0} {1}", this.Application.Version, Environment.Is64BitProcess ? "x64" : "x86");
log.InfoFormat("Language: {0}", Application.LanguageSettings.get_LanguageID(Microsoft.Office.Core.MsoAppLanguageID.msoLanguageIDUI));
//Set up exception handlers
System.Windows.Forms.Application.ThreadException += Application_ThreadException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
//Start cleanup timer
int cleanupTimerInterval = int.Parse(System.Configuration.ConfigurationManager.AppSettings["CleanupTimerInterval"]);
log.InfoFormat("Starting cleanup timer -- run every {0} minutes", cleanupTimerInterval);
cleanupTimer = new System.Threading.Timer(CleanupTimer_Callback, null, 0, cleanupTimerInterval * 60 * 1000);
//Start hook;
hook = new DragDropHook();
hook.Start();
}
catch (Exception ex)
{
log.Fatal("Fatal error", ex);
if (hook != null)
hook.Stop();
}
}
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
log.Fatal("Appdomain exception", (Exception)e.ExceptionObject);
}
private void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
log.Fatal("Application thread exception", e.Exception);
}
private void CleanupTimer_Callback(object state)
{
try
{
int tempFileExpiration = int.Parse(System.Configuration.ConfigurationManager.AppSettings["TempFileExpiration"]);
log.InfoFormat("Cleaning up temp files older than {0} minutes", tempFileExpiration);
FileUtility.CleanupTempPath(tempFileExpiration);
}
catch (Exception ex)
{
log.Error("Error cleaning up temp files", ex);
}
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
// Note: Outlook no longer raises this event. If you have code that
// must run when Outlook shuts down, see http://go.microsoft.com/fwlink/?LinkId=506785
try
{
log.Info("Add-in shutdown");
if (hook != null)
hook.Stop();
}
catch (Exception ex)
{
log.Fatal("Fatal error", ex);
}
}
#region VSTO generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
}
}
================================================
FILE: OutlookFileDrag/packages.config
================================================
================================================
FILE: OutlookFileDrag.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OutlookFileDrag", "OutlookFileDrag\OutlookFileDrag.csproj", "{88E6522A-C68B-42C8-8B5E-9C959BA6C415}"
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "OutlookFileDragSetup_x64", "OutlookFileDragSetup_x64\OutlookFileDragSetup_x64.vdproj", "{B42086D0-8877-4CF2-B3FE-C19210CD683D}"
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "OutlookFileDragSetup", "OutlookFileDragSetup\OutlookFileDragSetup.vdproj", "{0EF72B7A-7619-4572-A1C1-B31938BC6954}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documents", "Documents", "{7A072433-B080-41DB-A449-19F4B547610B}"
ProjectSection(SolutionItems) = preProject
LICENSE = LICENSE
License.rtf = License.rtf
Readme.md = Readme.md
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
CD_ROM|Any CPU = CD_ROM|Any CPU
Debug|Any CPU = Debug|Any CPU
DVD-5|Any CPU = DVD-5|Any CPU
Release|Any CPU = Release|Any CPU
SingleImage|Any CPU = SingleImage|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{88E6522A-C68B-42C8-8B5E-9C959BA6C415}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU
{88E6522A-C68B-42C8-8B5E-9C959BA6C415}.CD_ROM|Any CPU.Build.0 = Release|Any CPU
{88E6522A-C68B-42C8-8B5E-9C959BA6C415}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{88E6522A-C68B-42C8-8B5E-9C959BA6C415}.Debug|Any CPU.Build.0 = Debug|Any CPU
{88E6522A-C68B-42C8-8B5E-9C959BA6C415}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{88E6522A-C68B-42C8-8B5E-9C959BA6C415}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{88E6522A-C68B-42C8-8B5E-9C959BA6C415}.Release|Any CPU.ActiveCfg = Release|Any CPU
{88E6522A-C68B-42C8-8B5E-9C959BA6C415}.Release|Any CPU.Build.0 = Release|Any CPU
{88E6522A-C68B-42C8-8B5E-9C959BA6C415}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU
{88E6522A-C68B-42C8-8B5E-9C959BA6C415}.SingleImage|Any CPU.Build.0 = Release|Any CPU
{B42086D0-8877-4CF2-B3FE-C19210CD683D}.CD_ROM|Any CPU.ActiveCfg = Release
{B42086D0-8877-4CF2-B3FE-C19210CD683D}.CD_ROM|Any CPU.Build.0 = Release
{B42086D0-8877-4CF2-B3FE-C19210CD683D}.Debug|Any CPU.ActiveCfg = Debug
{B42086D0-8877-4CF2-B3FE-C19210CD683D}.Debug|Any CPU.Build.0 = Debug
{B42086D0-8877-4CF2-B3FE-C19210CD683D}.DVD-5|Any CPU.ActiveCfg = Debug
{B42086D0-8877-4CF2-B3FE-C19210CD683D}.DVD-5|Any CPU.Build.0 = Debug
{B42086D0-8877-4CF2-B3FE-C19210CD683D}.Release|Any CPU.ActiveCfg = Release
{B42086D0-8877-4CF2-B3FE-C19210CD683D}.Release|Any CPU.Build.0 = Release
{B42086D0-8877-4CF2-B3FE-C19210CD683D}.SingleImage|Any CPU.ActiveCfg = Release
{B42086D0-8877-4CF2-B3FE-C19210CD683D}.SingleImage|Any CPU.Build.0 = Release
{0EF72B7A-7619-4572-A1C1-B31938BC6954}.CD_ROM|Any CPU.ActiveCfg = Release
{0EF72B7A-7619-4572-A1C1-B31938BC6954}.CD_ROM|Any CPU.Build.0 = Release
{0EF72B7A-7619-4572-A1C1-B31938BC6954}.Debug|Any CPU.ActiveCfg = Debug
{0EF72B7A-7619-4572-A1C1-B31938BC6954}.Debug|Any CPU.Build.0 = Debug
{0EF72B7A-7619-4572-A1C1-B31938BC6954}.DVD-5|Any CPU.ActiveCfg = Debug
{0EF72B7A-7619-4572-A1C1-B31938BC6954}.DVD-5|Any CPU.Build.0 = Debug
{0EF72B7A-7619-4572-A1C1-B31938BC6954}.Release|Any CPU.ActiveCfg = Release
{0EF72B7A-7619-4572-A1C1-B31938BC6954}.Release|Any CPU.Build.0 = Release
{0EF72B7A-7619-4572-A1C1-B31938BC6954}.SingleImage|Any CPU.ActiveCfg = Release
{0EF72B7A-7619-4572-A1C1-B31938BC6954}.SingleImage|Any CPU.Build.0 = Release
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
================================================
FILE: OutlookFileDragSetup/OutlookFileDragSetup.vdproj
================================================
"DeployProject"
{
"VSVersion" = "3:800"
"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
"IsWebType" = "8:FALSE"
"ProjectName" = "8:OutlookFileDragSetup"
"LanguageId" = "3:1033"
"CodePage" = "3:1252"
"UILanguageId" = "3:1033"
"SccProjectName" = "8:"
"SccLocalPath" = "8:"
"SccAuxPath" = "8:"
"SccProvider" = "8:"
"Hierarchy"
{
"Entry"
{
"MsmKey" = "8:_0A93BF555B38467ABC9AFEBDA2D4ABCC"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_12FE3AC54ED17E0AB1007324ABFD58D1"
"OwnerKey" = "8:_C3161A936F4192497A0972C3EC781BF6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_12FE3AC54ED17E0AB1007324ABFD58D1"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_133D4E0B8AD91071625356F7F9F22C66"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_15F0BD9071B5889215577FD20EC63766"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F"
"OwnerKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F"
"OwnerKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_591351D571FEB540A92347F0F74B55CE"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_811077B889234B5E8D92FD9440B779AD"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37"
"OwnerKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_9CE773A8FA4242D096608C6597B170E4"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_BB365CE8FF8B85A3589349A35DAB0785"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_BB365CE8FF8B85A3589349A35DAB0785"
"OwnerKey" = "8:_133D4E0B8AD91071625356F7F9F22C66"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C3161A936F4192497A0972C3EC781BF6"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_E81182AD22C040558214805DBCE4ACCA"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_15F0BD9071B5889215577FD20EC63766"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_C3161A936F4192497A0972C3EC781BF6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_12FE3AC54ED17E0AB1007324ABFD58D1"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_133D4E0B8AD91071625356F7F9F22C66"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_BB365CE8FF8B85A3589349A35DAB0785"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_591351D571FEB540A92347F0F74B55CE"
"MsmSig" = "8:_UNDEFINED"
}
}
"Configurations"
{
"Debug"
{
"DisplayName" = "8:Debug"
"IsDebugOnly" = "11:TRUE"
"IsReleaseOnly" = "11:FALSE"
"OutputFilename" = "8:Debug\\OutlookFileDragSetup.msi"
"PackageFilesAs" = "3:2"
"PackageFileSize" = "3:-2147483648"
"CabType" = "3:1"
"Compression" = "3:2"
"SignOutput" = "11:FALSE"
"CertificateFile" = "8:"
"PrivateKeyFile" = "8:"
"TimeStampServer" = "8:"
"InstallerBootstrapper" = "3:2"
"BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
{
"Enabled" = "11:TRUE"
"PromptEnabled" = "11:TRUE"
"PrerequisitesLocation" = "2:1"
"Url" = "8:"
"ComponentsUrl" = "8:"
"Items"
{
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.5"
{
"Name" = "8:Microsoft .NET Framework 4.5 (x86 and x64)"
"ProductCode" = "8:.NETFramework,Version=v4.5"
}
}
}
}
"Release"
{
"DisplayName" = "8:Release"
"IsDebugOnly" = "11:FALSE"
"IsReleaseOnly" = "11:TRUE"
"OutputFilename" = "8:Release\\OutlookFileDragSetup.msi"
"PackageFilesAs" = "3:2"
"PackageFileSize" = "3:-2147483648"
"CabType" = "3:1"
"Compression" = "3:2"
"SignOutput" = "11:FALSE"
"CertificateFile" = "8:"
"PrivateKeyFile" = "8:"
"TimeStampServer" = "8:"
"InstallerBootstrapper" = "3:2"
"BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
{
"Enabled" = "11:TRUE"
"PromptEnabled" = "11:TRUE"
"PrerequisitesLocation" = "2:1"
"Url" = "8:"
"ComponentsUrl" = "8:"
"Items"
{
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.5"
{
"Name" = "8:Microsoft .NET Framework 4.5 (x86 and x64)"
"ProductCode" = "8:.NETFramework,Version=v4.5"
}
}
}
}
}
"Deployable"
{
"CustomAction"
{
}
"DefaultFeature"
{
"Name" = "8:DefaultFeature"
"Title" = "8:"
"Description" = "8:"
}
"ExternalPersistence"
{
"LaunchCondition"
{
"{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_44641C1530CC419BA8B9920E58E9A08E"
{
"Name" = "8:.NET Framework"
"Message" = "8:[VSDNETMSG]"
"FrameworkVersion" = "8:.NETFramework,Version=v4.5"
"AllowLaterVersions" = "11:FALSE"
"InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=395269"
}
}
}
"File"
{
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0A93BF555B38467ABC9AFEBDA2D4ABCC"
{
"SourcePath" = "8:..\\OutlookFileDrag\\EasyHook32.dll"
"TargetName" = "8:EasyHook32.dll"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_12FE3AC54ED17E0AB1007324ABFD58D1"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.VisualStudio.Tools.Applications.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_12FE3AC54ED17E0AB1007324ABFD58D1"
{
"Name" = "8:Microsoft.VisualStudio.Tools.Applications.Runtime.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.VisualStudio.Tools.Applications.Runtime.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_133D4E0B8AD91071625356F7F9F22C66"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Outlook.v4.0.Utilities, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_133D4E0B8AD91071625356F7F9F22C66"
{
"Name" = "8:Microsoft.Office.Tools.Outlook.v4.0.Utilities.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Office.Tools.Outlook.v4.0.Utilities.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_15F0BD9071B5889215577FD20EC63766"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:EasyHook, Version=2.7.6578.0, Culture=neutral, PublicKeyToken=4b580fca19d0b0c5, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_15F0BD9071B5889215577FD20EC63766"
{
"Name" = "8:EasyHook.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:EasyHook.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3DBBABF7C43171A6F7B4D8D682699556"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Outlook, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_3DBBABF7C43171A6F7B4D8D682699556"
{
"Name" = "8:Microsoft.Office.Tools.Outlook.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Office.Tools.Outlook.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5575AAAA0CAC3763D8DCDDD642FBD25F"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_5575AAAA0CAC3763D8DCDDD642FBD25F"
{
"Name" = "8:Microsoft.Office.Tools.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Office.Tools.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_591351D571FEB540A92347F0F74B55CE"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"ScatterAssemblies"
{
"_591351D571FEB540A92347F0F74B55CE"
{
"Name" = "8:stdole.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:stdole.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_811077B889234B5E8D92FD9440B779AD"
{
"SourcePath" = "8:..\\License.rtf"
"TargetName" = "8:License.rtf"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_9B3B11113C57483FCBDDB37CB3ED5F37"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_9B3B11113C57483FCBDDB37CB3ED5F37"
{
"Name" = "8:Microsoft.Office.Tools.Common.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Office.Tools.Common.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9CE773A8FA4242D096608C6597B170E4"
{
"SourcePath" = "8:..\\OutlookFileDrag\\bin\\Release\\OutlookFileDrag.dll.manifest"
"TargetName" = "8:OutlookFileDrag.dll.manifest"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BB365CE8FF8B85A3589349A35DAB0785"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Common.v4.0.Utilities, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_BB365CE8FF8B85A3589349A35DAB0785"
{
"Name" = "8:Microsoft.Office.Tools.Common.v4.0.Utilities.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Office.Tools.Common.v4.0.Utilities.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C3161A936F4192497A0972C3EC781BF6"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.v4.0.Framework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_C3161A936F4192497A0972C3EC781BF6"
{
"Name" = "8:Microsoft.Office.Tools.v4.0.Framework.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Office.Tools.v4.0.Framework.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9"
{
"Name" = "8:log4net.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:log4net.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E81182AD22C040558214805DBCE4ACCA"
{
"SourcePath" = "8:..\\OutlookFileDrag\\bin\\Release\\OutlookFileDrag.vsto"
"TargetName" = "8:OutlookFileDrag.vsto"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
}
"FileType"
{
}
"Folder"
{
"{1525181F-901A-416C-8A58-119130FE478E}:_4C10008235FF4D1F8A1EC7E2473D78C3"
{
"Name" = "8:#1919"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:ProgramMenuFolder"
"Folders"
{
}
}
"{3C67513D-01DD-4637-8A68-80971EB9504F}:_919F44B827474C528E0E9FF4CAE2B9AE"
{
"DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
"Name" = "8:#1925"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:TARGETDIR"
"Folders"
{
}
}
"{1525181F-901A-416C-8A58-119130FE478E}:_D44EFF1C326F4D2BADA2F7528B91CC01"
{
"Name" = "8:#1916"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:DesktopFolder"
"Folders"
{
}
}
}
"LaunchCondition"
{
}
"Locator"
{
}
"MsiBootstrapper"
{
"LangId" = "3:1033"
"RequiresElevation" = "11:FALSE"
}
"Product"
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:Outlook File Drag"
"ProductCode" = "8:{E1259659-073D-4042-AF4D-05AEDBA3C9C8}"
"PackageCode" = "8:{82C3D368-32B5-488A-A19C-452F635E19FF}"
"UpgradeCode" = "8:{2F626147-8F83-4FC1-9190-32AA4F25D487}"
"AspNetVersion" = "8:4.0.30319.0"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:TRUE"
"ProductVersion" = "8:1.0.11"
"Manufacturer" = "8:Tony Federer"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:https://github.com/tonyfederer/OutlookFileDrag"
"Title" = "8:Outlook File Drag Setup"
"Subject" = "8:"
"ARPCONTACT" = "8:Tony Federer"
"Keywords" = "8:"
"ARPCOMMENTS" = "8:Drag and drop Outlook items as files into any application"
"ARPURLINFOABOUT" = "8:"
"ARPPRODUCTICON" = "8:"
"ARPIconIndex" = "3:0"
"SearchPath" = "8:"
"UseSystemSearchPath" = "11:TRUE"
"TargetPlatform" = "3:0"
"PreBuildEvent" = "8:"
"PostBuildEvent" = "8:"
"RunPostBuildEvent" = "3:0"
}
"Registry"
{
"HKLM"
{
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_D4A904143A3D42869C1DE1D4F1A30D0E"
{
"Name" = "8:Software"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_22D1BC2B78644122968D266BD453DE99"
{
"Name" = "8:WOW6432Node"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_8F27B43AF5DE476E9EE2AE86B3C2DF45"
{
"Name" = "8:Microsoft"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_33EBC259BC9E4D39A94966448F31B769"
{
"Name" = "8:Office"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_4A6052B230644EAFA587141B09595C8C"
{
"Name" = "8:Outlook"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_C8B5751F82A44695AC627E9C50443F3C"
{
"Name" = "8:Addins"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_FA680E6DBA8248D891731BA238E0099C"
{
"Name" = "8:OutlookFileDrag"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:TRUE"
"Transitive" = "11:FALSE"
"Keys"
{
}
"Values"
{
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_4BB9A67E5DC4464588D3093EAA7D52D4"
{
"Name" = "8:Manifest"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:1"
"Value" = "8:file:///[TARGETDIR]OutlookFileDrag.vsto|vstolocal"
}
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_602742F0760846239584275A35DA1AAB"
{
"Name" = "8:FriendlyName"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:1"
"Value" = "8:OutlookFileDrag"
}
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_BDE554EC0FD5452B880DFE5E62B1F33B"
{
"Name" = "8:LoadBehavior"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:3"
"Value" = "3:3"
}
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_CCB6882391414CACBFF9CA1E7D561491"
{
"Name" = "8:Description"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:1"
"Value" = "8:Drag Outlook items as files into any application"
}
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_354F1B5F9F6E445BAE6A035E97CF0822"
{
"Name" = "8:Microsoft"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B3FBE7EA97A140C5B5B598854F9A0FAC"
{
"Name" = "8:Office"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B3827A07754641D9AD6ED474A07D3788"
{
"Name" = "8:Outlook"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B153EB6F913F4E6B86EB8FA442B32E01"
{
"Name" = "8:Addins"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_CF568FCCF5F949B9BB57B58832FCC5E8"
{
"Name" = "8:OutlookFileDrag"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:TRUE"
"Transitive" = "11:FALSE"
"Keys"
{
}
"Values"
{
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_0EC644502E3F48E4B628F34BDF6629EE"
{
"Name" = "8:Description"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:1"
"Value" = "8:Drag Outlook items as files into any application"
}
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_3D1BF5D39D24455DAA6C83039CAB218A"
{
"Name" = "8:LoadBehavior"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:3"
"Value" = "3:3"
}
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_C924643C1D0B486CBA80C7750F4A2F78"
{
"Name" = "8:FriendlyName"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:1"
"Value" = "8:Outlook File Drag"
}
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_FE433651CB1C4B27B454859B408DC466"
{
"Name" = "8:Manifest"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:1"
"Value" = "8:file:///[TARGETDIR]OutlookFileDrag.vsto|vstolocal"
}
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
}
"HKCU"
{
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_6FAF1F902A2C40D480CF8007A399A463"
{
"Name" = "8:Software"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
}
"Values"
{
}
}
}
}
"HKCR"
{
"Keys"
{
}
}
"HKU"
{
"Keys"
{
}
}
"HKPU"
{
"Keys"
{
}
}
}
"Sequences"
{
}
"Shortcut"
{
}
"UserInterface"
{
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_2371DACEF6F94E98AF0C94614DF03E04"
{
"Name" = "8:#1900"
"Sequence" = "3:1"
"Attributes" = "3:1"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_26A83612205E4DBC81DBC76172D2C1F8"
{
"Sequence" = "3:100"
"DisplayName" = "8:Welcome"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdWelcomeDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"CopyrightWarning"
{
"Name" = "8:CopyrightWarning"
"DisplayName" = "8:#1002"
"Description" = "8:#1102"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:2"
"Value" = "8:"
"DefaultValue" = "8:#1202"
"UsePlugInResources" = "11:TRUE"
}
"Welcome"
{
"Name" = "8:Welcome"
"DisplayName" = "8:#1003"
"Description" = "8:#1103"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1203"
"DefaultValue" = "8:#1203"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_8F1EFA7475EA4E6F934BEA882EE7D273"
{
"Sequence" = "3:200"
"DisplayName" = "8:Installation Folder"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdFolderDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"InstallAllUsersVisible"
{
"Name" = "8:InstallAllUsersVisible"
"DisplayName" = "8:#1059"
"Description" = "8:#1159"
"Type" = "3:5"
"ContextData" = "8:1;True=1;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:0"
"DefaultValue" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C619EF5B3A384CA2B73D88272FDCF4E6"
{
"Sequence" = "3:110"
"DisplayName" = "8:License Agreement"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdLicenseDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"EulaText"
{
"Name" = "8:EulaText"
"DisplayName" = "8:#1008"
"Description" = "8:#1108"
"Type" = "3:6"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:2"
"Value" = "8:_811077B889234B5E8D92FD9440B779AD"
"UsePlugInResources" = "11:TRUE"
}
"Sunken"
{
"Name" = "8:Sunken"
"DisplayName" = "8:#1007"
"Description" = "8:#1107"
"Type" = "3:5"
"ContextData" = "8:4;True=4;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:4"
"DefaultValue" = "3:4"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F2099CB7BD9B4B7EA55AC883A3EF4D99"
{
"Sequence" = "3:300"
"DisplayName" = "8:Confirm Installation"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdConfirmDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_3640BE8DA10C43B08302EDBF1D242F02"
{
"Name" = "8:#1901"
"Sequence" = "3:2"
"Attributes" = "3:2"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_02CEF8D9F8474FFF8F7BC9850C702E5A"
{
"Sequence" = "3:100"
"DisplayName" = "8:Progress"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdAdminProgressDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"ShowProgress"
{
"Name" = "8:ShowProgress"
"DisplayName" = "8:#1009"
"Description" = "8:#1109"
"Type" = "3:5"
"ContextData" = "8:1;True=1;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:1"
"DefaultValue" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_51AFB1E6343E4D1CBE228814E8E53FB7"
{
"Name" = "8:#1901"
"Sequence" = "3:1"
"Attributes" = "3:2"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C069CBE9F6354A4489912B7C2A93A0E7"
{
"Sequence" = "3:100"
"DisplayName" = "8:Progress"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdProgressDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"ShowProgress"
{
"Name" = "8:ShowProgress"
"DisplayName" = "8:#1009"
"Description" = "8:#1109"
"Type" = "3:5"
"ContextData" = "8:1;True=1;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:1"
"DefaultValue" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_6A78FCF2607F4ED4993C83C317BDF788"
{
"UseDynamicProperties" = "11:FALSE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdUserInterface.wim"
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_73653059E18A46DBA5A094EB50F3F1EC"
{
"Name" = "8:#1900"
"Sequence" = "3:2"
"Attributes" = "3:1"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_6DAE5AFAE9644A67B0639F0C67E856E9"
{
"Sequence" = "3:300"
"DisplayName" = "8:Confirm Installation"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdAdminConfirmDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B86FF87ADAFE4746BFC955ADC4623837"
{
"Sequence" = "3:110"
"DisplayName" = "8:License Agreement"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdAdminLicenseDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"EulaText"
{
"Name" = "8:EulaText"
"DisplayName" = "8:#1008"
"Description" = "8:#1108"
"Type" = "3:6"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:2"
"Value" = "8:_811077B889234B5E8D92FD9440B779AD"
"UsePlugInResources" = "11:TRUE"
}
"Sunken"
{
"Name" = "8:Sunken"
"DisplayName" = "8:#1007"
"Description" = "8:#1107"
"Type" = "3:5"
"ContextData" = "8:4;True=4;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:4"
"DefaultValue" = "3:4"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C2BD515F58AE4374BDD15A00EA7FFF3D"
{
"Sequence" = "3:100"
"DisplayName" = "8:Welcome"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdAdminWelcomeDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"CopyrightWarning"
{
"Name" = "8:CopyrightWarning"
"DisplayName" = "8:#1002"
"Description" = "8:#1102"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1202"
"DefaultValue" = "8:#1202"
"UsePlugInResources" = "11:TRUE"
}
"Welcome"
{
"Name" = "8:Welcome"
"DisplayName" = "8:#1003"
"Description" = "8:#1103"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1203"
"DefaultValue" = "8:#1203"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_FE7438441C294F67A9A2827BE22A936E"
{
"Sequence" = "3:200"
"DisplayName" = "8:Installation Folder"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdAdminFolderDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_9BD9D3D3A44C45D39936506919F27084"
{
"Name" = "8:#1902"
"Sequence" = "3:1"
"Attributes" = "3:3"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E9CDCE57CC8B40A2A6B4155953836767"
{
"Sequence" = "3:100"
"DisplayName" = "8:Finished"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdFinishedDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"UpdateText"
{
"Name" = "8:UpdateText"
"DisplayName" = "8:#1058"
"Description" = "8:#1158"
"Type" = "3:15"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1258"
"DefaultValue" = "8:#1258"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_C001A743B84C4C898270AA9143A46C9F"
{
"Name" = "8:#1902"
"Sequence" = "3:2"
"Attributes" = "3:3"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B8367B2F3AB14A32B53AC3C64C3815E3"
{
"Sequence" = "3:100"
"DisplayName" = "8:Finished"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdAdminFinishedDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_C08686B031154BE19BFDEA8BAA2F4BF3"
{
"UseDynamicProperties" = "11:FALSE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdBasicDialogs.wim"
}
}
"MergeModule"
{
}
"ProjectOutput"
{
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_54EF5F74A56C4AEE96D4330B540B4A3A"
{
"SourcePath" = "8:..\\OutlookFileDrag\\obj\\Debug\\OutlookFileDrag.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
"ProjectOutputGroupRegister" = "3:1"
"OutputConfiguration" = "8:"
"OutputGroupCanonicalName" = "8:Built"
"OutputProjectGuid" = "8:{88E6522A-C68B-42C8-8B5E-9C959BA6C415}"
"ShowKeyOutput" = "11:TRUE"
"ExcludeFilters"
{
}
}
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_A2682E522C9745F7840F601359FBC055"
{
"SourcePath" = "8:"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
"ProjectOutputGroupRegister" = "3:1"
"OutputConfiguration" = "8:"
"OutputGroupCanonicalName" = "8:ContentFiles"
"OutputProjectGuid" = "8:{88E6522A-C68B-42C8-8B5E-9C959BA6C415}"
"ShowKeyOutput" = "11:TRUE"
"ExcludeFilters"
{
}
}
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_F45C1AA6C44446A4BFB09062C1E0C83B"
{
"SourcePath" = "8:"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
"ProjectOutputGroupRegister" = "3:1"
"OutputConfiguration" = "8:"
"OutputGroupCanonicalName" = "8:Symbols"
"OutputProjectGuid" = "8:{88E6522A-C68B-42C8-8B5E-9C959BA6C415}"
"ShowKeyOutput" = "11:TRUE"
"ExcludeFilters"
{
}
}
}
}
}
================================================
FILE: OutlookFileDragSetup_x64/OutlookFileDragSetup_x64.vdproj
================================================
"DeployProject"
{
"VSVersion" = "3:800"
"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
"IsWebType" = "8:FALSE"
"ProjectName" = "8:OutlookFileDragSetup_x64"
"LanguageId" = "3:1033"
"CodePage" = "3:1252"
"UILanguageId" = "3:1033"
"SccProjectName" = "8:"
"SccLocalPath" = "8:"
"SccAuxPath" = "8:"
"SccProvider" = "8:"
"Hierarchy"
{
"Entry"
{
"MsmKey" = "8:_12FE3AC54ED17E0AB1007324ABFD58D1"
"OwnerKey" = "8:_C3161A936F4192497A0972C3EC781BF6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_12FE3AC54ED17E0AB1007324ABFD58D1"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_133D4E0B8AD91071625356F7F9F22C66"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_15F0BD9071B5889215577FD20EC63766"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F"
"OwnerKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F"
"OwnerKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_591351D571FEB540A92347F0F74B55CE"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37"
"OwnerKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_9CE773A8FA4242D096608C6597B170E4"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_9F1635A8DEF84079B9675D027C0460A4"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_BB365CE8FF8B85A3589349A35DAB0785"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_BB365CE8FF8B85A3589349A35DAB0785"
"OwnerKey" = "8:_133D4E0B8AD91071625356F7F9F22C66"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C3161A936F4192497A0972C3EC781BF6"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_DB2A43345F9440DD84405C790D1EDDA2"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_E81182AD22C040558214805DBCE4ACCA"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_FDD7226F564A40639B9655DB42455355"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_15F0BD9071B5889215577FD20EC63766"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_C3161A936F4192497A0972C3EC781BF6"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_12FE3AC54ED17E0AB1007324ABFD58D1"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_133D4E0B8AD91071625356F7F9F22C66"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_BB365CE8FF8B85A3589349A35DAB0785"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_591351D571FEB540A92347F0F74B55CE"
"MsmSig" = "8:_UNDEFINED"
}
}
"Configurations"
{
"Debug"
{
"DisplayName" = "8:Debug"
"IsDebugOnly" = "11:TRUE"
"IsReleaseOnly" = "11:FALSE"
"OutputFilename" = "8:Debug\\OutlookFileDragSetup_x64.msi"
"PackageFilesAs" = "3:2"
"PackageFileSize" = "3:-2147483648"
"CabType" = "3:1"
"Compression" = "3:2"
"SignOutput" = "11:FALSE"
"CertificateFile" = "8:"
"PrivateKeyFile" = "8:"
"TimeStampServer" = "8:"
"InstallerBootstrapper" = "3:2"
"BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
{
"Enabled" = "11:TRUE"
"PromptEnabled" = "11:TRUE"
"PrerequisitesLocation" = "2:1"
"Url" = "8:"
"ComponentsUrl" = "8:"
"Items"
{
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.5"
{
"Name" = "8:Microsoft .NET Framework 4.5 (x86 and x64)"
"ProductCode" = "8:.NETFramework,Version=v4.5"
}
}
}
}
"Release"
{
"DisplayName" = "8:Release"
"IsDebugOnly" = "11:FALSE"
"IsReleaseOnly" = "11:TRUE"
"OutputFilename" = "8:Release\\OutlookFileDragSetup_x64.msi"
"PackageFilesAs" = "3:2"
"PackageFileSize" = "3:-2147483648"
"CabType" = "3:1"
"Compression" = "3:2"
"SignOutput" = "11:FALSE"
"CertificateFile" = "8:"
"PrivateKeyFile" = "8:"
"TimeStampServer" = "8:"
"InstallerBootstrapper" = "3:2"
"BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
{
"Enabled" = "11:TRUE"
"PromptEnabled" = "11:TRUE"
"PrerequisitesLocation" = "2:1"
"Url" = "8:"
"ComponentsUrl" = "8:"
"Items"
{
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.5"
{
"Name" = "8:Microsoft .NET Framework 4.5 (x86 and x64)"
"ProductCode" = "8:.NETFramework,Version=v4.5"
}
}
}
}
}
"Deployable"
{
"CustomAction"
{
}
"DefaultFeature"
{
"Name" = "8:DefaultFeature"
"Title" = "8:"
"Description" = "8:"
}
"ExternalPersistence"
{
"LaunchCondition"
{
"{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_44641C1530CC419BA8B9920E58E9A08E"
{
"Name" = "8:.NET Framework"
"Message" = "8:[VSDNETMSG]"
"FrameworkVersion" = "8:.NETFramework,Version=v4.5"
"AllowLaterVersions" = "11:FALSE"
"InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=395269"
}
}
}
"File"
{
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_12FE3AC54ED17E0AB1007324ABFD58D1"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.VisualStudio.Tools.Applications.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_12FE3AC54ED17E0AB1007324ABFD58D1"
{
"Name" = "8:Microsoft.VisualStudio.Tools.Applications.Runtime.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.VisualStudio.Tools.Applications.Runtime.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_133D4E0B8AD91071625356F7F9F22C66"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Outlook.v4.0.Utilities, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_133D4E0B8AD91071625356F7F9F22C66"
{
"Name" = "8:Microsoft.Office.Tools.Outlook.v4.0.Utilities.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Office.Tools.Outlook.v4.0.Utilities.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_15F0BD9071B5889215577FD20EC63766"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:EasyHook, Version=2.7.6578.0, Culture=neutral, PublicKeyToken=4b580fca19d0b0c5, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_15F0BD9071B5889215577FD20EC63766"
{
"Name" = "8:EasyHook.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:EasyHook.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3DBBABF7C43171A6F7B4D8D682699556"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Outlook, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_3DBBABF7C43171A6F7B4D8D682699556"
{
"Name" = "8:Microsoft.Office.Tools.Outlook.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Office.Tools.Outlook.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5575AAAA0CAC3763D8DCDDD642FBD25F"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_5575AAAA0CAC3763D8DCDDD642FBD25F"
{
"Name" = "8:Microsoft.Office.Tools.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Office.Tools.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_591351D571FEB540A92347F0F74B55CE"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
"ScatterAssemblies"
{
"_591351D571FEB540A92347F0F74B55CE"
{
"Name" = "8:stdole.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:stdole.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_9B3B11113C57483FCBDDB37CB3ED5F37"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_9B3B11113C57483FCBDDB37CB3ED5F37"
{
"Name" = "8:Microsoft.Office.Tools.Common.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Office.Tools.Common.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9CE773A8FA4242D096608C6597B170E4"
{
"SourcePath" = "8:..\\OutlookFileDrag\\bin\\Release\\OutlookFileDrag.dll.manifest"
"TargetName" = "8:OutlookFileDrag.dll.manifest"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9F1635A8DEF84079B9675D027C0460A4"
{
"SourcePath" = "8:..\\License.rtf"
"TargetName" = "8:License.rtf"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BB365CE8FF8B85A3589349A35DAB0785"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Common.v4.0.Utilities, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_BB365CE8FF8B85A3589349A35DAB0785"
{
"Name" = "8:Microsoft.Office.Tools.Common.v4.0.Utilities.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Office.Tools.Common.v4.0.Utilities.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C3161A936F4192497A0972C3EC781BF6"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.v4.0.Framework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_C3161A936F4192497A0972C3EC781BF6"
{
"Name" = "8:Microsoft.Office.Tools.v4.0.Framework.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Microsoft.Office.Tools.v4.0.Framework.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9"
{
"Name" = "8:log4net.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:log4net.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DB2A43345F9440DD84405C790D1EDDA2"
{
"SourcePath" = "8:..\\OutlookFileDrag\\EasyHook64.dll"
"TargetName" = "8:EasyHook64.dll"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E81182AD22C040558214805DBCE4ACCA"
{
"SourcePath" = "8:..\\OutlookFileDrag\\bin\\Release\\OutlookFileDrag.vsto"
"TargetName" = "8:OutlookFileDrag.vsto"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_FDD7226F564A40639B9655DB42455355"
{
"SourcePath" = "8:..\\OutlookFileDrag\\EasyHook32.dll"
"TargetName" = "8:EasyHook32.dll"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
}
"FileType"
{
}
"Folder"
{
"{1525181F-901A-416C-8A58-119130FE478E}:_4C10008235FF4D1F8A1EC7E2473D78C3"
{
"Name" = "8:#1919"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:ProgramMenuFolder"
"Folders"
{
}
}
"{3C67513D-01DD-4637-8A68-80971EB9504F}:_919F44B827474C528E0E9FF4CAE2B9AE"
{
"DefaultLocation" = "8:[ProgramFiles64Folder][Manufacturer]\\[ProductName]"
"Name" = "8:#1925"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:TARGETDIR"
"Folders"
{
}
}
"{1525181F-901A-416C-8A58-119130FE478E}:_D44EFF1C326F4D2BADA2F7528B91CC01"
{
"Name" = "8:#1916"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:DesktopFolder"
"Folders"
{
}
}
}
"LaunchCondition"
{
}
"Locator"
{
}
"MsiBootstrapper"
{
"LangId" = "3:1033"
"RequiresElevation" = "11:FALSE"
}
"Product"
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:Outlook File Drag"
"ProductCode" = "8:{0FB154FE-B6B3-4C4F-9DE1-DD9D5D3670A5}"
"PackageCode" = "8:{7C7FBEE4-D524-4FEB-8EE9-2B450B3D5827}"
"UpgradeCode" = "8:{65870D9B-6652-4150-830B-C5199F26E62C}"
"AspNetVersion" = "8:4.0.30319.0"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:TRUE"
"ProductVersion" = "8:1.0.11"
"Manufacturer" = "8:Tony Federer"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:https://github.com/tonyfederer/OutlookFileDrag"
"Title" = "8:Outlook File Drag Setup (x64)"
"Subject" = "8:"
"ARPCONTACT" = "8:Tony Federer"
"Keywords" = "8:"
"ARPCOMMENTS" = "8:Drag and drop Outlook items as files into any application"
"ARPURLINFOABOUT" = "8:"
"ARPPRODUCTICON" = "8:"
"ARPIconIndex" = "3:0"
"SearchPath" = "8:"
"UseSystemSearchPath" = "11:TRUE"
"TargetPlatform" = "3:1"
"PreBuildEvent" = "8:"
"PostBuildEvent" = "8:"
"RunPostBuildEvent" = "3:0"
}
"Registry"
{
"HKLM"
{
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_D4A904143A3D42869C1DE1D4F1A30D0E"
{
"Name" = "8:Software"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_22D1BC2B78644122968D266BD453DE99"
{
"Name" = "8:WOW6432Node"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_8F27B43AF5DE476E9EE2AE86B3C2DF45"
{
"Name" = "8:Microsoft"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_33EBC259BC9E4D39A94966448F31B769"
{
"Name" = "8:Office"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_4A6052B230644EAFA587141B09595C8C"
{
"Name" = "8:Outlook"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_C8B5751F82A44695AC627E9C50443F3C"
{
"Name" = "8:Addins"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_FA680E6DBA8248D891731BA238E0099C"
{
"Name" = "8:OutlookFileDrag"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:TRUE"
"Transitive" = "11:FALSE"
"Keys"
{
}
"Values"
{
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_4BB9A67E5DC4464588D3093EAA7D52D4"
{
"Name" = "8:Manifest"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:1"
"Value" = "8:file:///[TARGETDIR]OutlookFileDrag.vsto|vstolocal"
}
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_602742F0760846239584275A35DA1AAB"
{
"Name" = "8:FriendlyName"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:1"
"Value" = "8:OutlookFileDrag"
}
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_BDE554EC0FD5452B880DFE5E62B1F33B"
{
"Name" = "8:LoadBehavior"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:3"
"Value" = "3:3"
}
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_CCB6882391414CACBFF9CA1E7D561491"
{
"Name" = "8:Description"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:1"
"Value" = "8:Drag Outlook items as files into any application"
}
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_354F1B5F9F6E445BAE6A035E97CF0822"
{
"Name" = "8:Microsoft"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B3FBE7EA97A140C5B5B598854F9A0FAC"
{
"Name" = "8:Office"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B3827A07754641D9AD6ED474A07D3788"
{
"Name" = "8:Outlook"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B153EB6F913F4E6B86EB8FA442B32E01"
{
"Name" = "8:Addins"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_CF568FCCF5F949B9BB57B58832FCC5E8"
{
"Name" = "8:OutlookFileDrag"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:TRUE"
"Transitive" = "11:FALSE"
"Keys"
{
}
"Values"
{
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_0EC644502E3F48E4B628F34BDF6629EE"
{
"Name" = "8:Description"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:1"
"Value" = "8:Drag Outlook items as files into any application"
}
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_3D1BF5D39D24455DAA6C83039CAB218A"
{
"Name" = "8:LoadBehavior"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:3"
"Value" = "3:3"
}
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_C924643C1D0B486CBA80C7750F4A2F78"
{
"Name" = "8:FriendlyName"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:1"
"Value" = "8:Outlook File Drag"
}
"{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_FE433651CB1C4B27B454859B408DC466"
{
"Name" = "8:Manifest"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"ValueTypes" = "3:1"
"Value" = "8:file:///[TARGETDIR]OutlookFileDrag.vsto|vstolocal"
}
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
"Values"
{
}
}
}
}
"HKCU"
{
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_6FAF1F902A2C40D480CF8007A399A463"
{
"Name" = "8:Software"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
}
"Values"
{
}
}
}
}
"HKCR"
{
"Keys"
{
}
}
"HKU"
{
"Keys"
{
}
}
"HKPU"
{
"Keys"
{
}
}
}
"Sequences"
{
}
"Shortcut"
{
}
"UserInterface"
{
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_2371DACEF6F94E98AF0C94614DF03E04"
{
"Name" = "8:#1900"
"Sequence" = "3:1"
"Attributes" = "3:1"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7C6F7BCCB3134D219B945FC671E2C571"
{
"Sequence" = "3:100"
"DisplayName" = "8:Welcome"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdWelcomeDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"CopyrightWarning"
{
"Name" = "8:CopyrightWarning"
"DisplayName" = "8:#1002"
"Description" = "8:#1102"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1202"
"DefaultValue" = "8:#1202"
"UsePlugInResources" = "11:TRUE"
}
"Welcome"
{
"Name" = "8:Welcome"
"DisplayName" = "8:#1003"
"Description" = "8:#1103"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1203"
"DefaultValue" = "8:#1203"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_8F1EFA7475EA4E6F934BEA882EE7D273"
{
"Sequence" = "3:200"
"DisplayName" = "8:Installation Folder"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdFolderDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"InstallAllUsersVisible"
{
"Name" = "8:InstallAllUsersVisible"
"DisplayName" = "8:#1059"
"Description" = "8:#1159"
"Type" = "3:5"
"ContextData" = "8:1;True=1;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:0"
"DefaultValue" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B4D5279C408E467694AF02D4E02D61D0"
{
"Sequence" = "3:110"
"DisplayName" = "8:License Agreement"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdLicenseDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"EulaText"
{
"Name" = "8:EulaText"
"DisplayName" = "8:#1008"
"Description" = "8:#1108"
"Type" = "3:6"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:2"
"Value" = "8:_9F1635A8DEF84079B9675D027C0460A4"
"UsePlugInResources" = "11:TRUE"
}
"Sunken"
{
"Name" = "8:Sunken"
"DisplayName" = "8:#1007"
"Description" = "8:#1107"
"Type" = "3:5"
"ContextData" = "8:4;True=4;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:4"
"DefaultValue" = "3:4"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F2099CB7BD9B4B7EA55AC883A3EF4D99"
{
"Sequence" = "3:300"
"DisplayName" = "8:Confirm Installation"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdConfirmDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_3640BE8DA10C43B08302EDBF1D242F02"
{
"Name" = "8:#1901"
"Sequence" = "3:2"
"Attributes" = "3:2"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_02CEF8D9F8474FFF8F7BC9850C702E5A"
{
"Sequence" = "3:100"
"DisplayName" = "8:Progress"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdAdminProgressDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"ShowProgress"
{
"Name" = "8:ShowProgress"
"DisplayName" = "8:#1009"
"Description" = "8:#1109"
"Type" = "3:5"
"ContextData" = "8:1;True=1;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:1"
"DefaultValue" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_51AFB1E6343E4D1CBE228814E8E53FB7"
{
"Name" = "8:#1901"
"Sequence" = "3:1"
"Attributes" = "3:2"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C069CBE9F6354A4489912B7C2A93A0E7"
{
"Sequence" = "3:100"
"DisplayName" = "8:Progress"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdProgressDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"ShowProgress"
{
"Name" = "8:ShowProgress"
"DisplayName" = "8:#1009"
"Description" = "8:#1109"
"Type" = "3:5"
"ContextData" = "8:1;True=1;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:1"
"DefaultValue" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_6A78FCF2607F4ED4993C83C317BDF788"
{
"UseDynamicProperties" = "11:FALSE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdUserInterface.wim"
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_73653059E18A46DBA5A094EB50F3F1EC"
{
"Name" = "8:#1900"
"Sequence" = "3:2"
"Attributes" = "3:1"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_4EAA0552B1A64272BACC7C0319AA1B0D"
{
"Sequence" = "3:110"
"DisplayName" = "8:License Agreement"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdAdminLicenseDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"EulaText"
{
"Name" = "8:EulaText"
"DisplayName" = "8:#1008"
"Description" = "8:#1108"
"Type" = "3:6"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:2"
"Value" = "8:_9F1635A8DEF84079B9675D027C0460A4"
"UsePlugInResources" = "11:TRUE"
}
"Sunken"
{
"Name" = "8:Sunken"
"DisplayName" = "8:#1007"
"Description" = "8:#1107"
"Type" = "3:5"
"ContextData" = "8:4;True=4;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:4"
"DefaultValue" = "3:4"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_6DAE5AFAE9644A67B0639F0C67E856E9"
{
"Sequence" = "3:300"
"DisplayName" = "8:Confirm Installation"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdAdminConfirmDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C2BD515F58AE4374BDD15A00EA7FFF3D"
{
"Sequence" = "3:100"
"DisplayName" = "8:Welcome"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdAdminWelcomeDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"CopyrightWarning"
{
"Name" = "8:CopyrightWarning"
"DisplayName" = "8:#1002"
"Description" = "8:#1102"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1202"
"DefaultValue" = "8:#1202"
"UsePlugInResources" = "11:TRUE"
}
"Welcome"
{
"Name" = "8:Welcome"
"DisplayName" = "8:#1003"
"Description" = "8:#1103"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1203"
"DefaultValue" = "8:#1203"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_FE7438441C294F67A9A2827BE22A936E"
{
"Sequence" = "3:200"
"DisplayName" = "8:Installation Folder"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdAdminFolderDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_9BD9D3D3A44C45D39936506919F27084"
{
"Name" = "8:#1902"
"Sequence" = "3:1"
"Attributes" = "3:3"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E9CDCE57CC8B40A2A6B4155953836767"
{
"Sequence" = "3:100"
"DisplayName" = "8:Finished"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdFinishedDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"UpdateText"
{
"Name" = "8:UpdateText"
"DisplayName" = "8:#1058"
"Description" = "8:#1158"
"Type" = "3:15"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1258"
"DefaultValue" = "8:#1258"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_C001A743B84C4C898270AA9143A46C9F"
{
"Name" = "8:#1902"
"Sequence" = "3:2"
"Attributes" = "3:3"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B8367B2F3AB14A32B53AC3C64C3815E3"
{
"Sequence" = "3:100"
"DisplayName" = "8:Finished"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdAdminFinishedDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_C08686B031154BE19BFDEA8BAA2F4BF3"
{
"UseDynamicProperties" = "11:FALSE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:\\VsdBasicDialogs.wim"
}
}
"MergeModule"
{
}
"ProjectOutput"
{
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_54EF5F74A56C4AEE96D4330B540B4A3A"
{
"SourcePath" = "8:..\\OutlookFileDrag\\obj\\Debug\\OutlookFileDrag.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
"ProjectOutputGroupRegister" = "3:1"
"OutputConfiguration" = "8:"
"OutputGroupCanonicalName" = "8:Built"
"OutputProjectGuid" = "8:{88E6522A-C68B-42C8-8B5E-9C959BA6C415}"
"ShowKeyOutput" = "11:TRUE"
"ExcludeFilters"
{
}
}
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_749FB0E6341A426B8E31DAFFC8EBE0F9"
{
"SourcePath" = "8:"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
"ProjectOutputGroupRegister" = "3:1"
"OutputConfiguration" = "8:"
"OutputGroupCanonicalName" = "8:ContentFiles"
"OutputProjectGuid" = "8:{88E6522A-C68B-42C8-8B5E-9C959BA6C415}"
"ShowKeyOutput" = "11:TRUE"
"ExcludeFilters"
{
}
}
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_CBE5DEADEE0E4AE7A4A3D0832595387F"
{
"SourcePath" = "8:"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
"ProjectOutputGroupRegister" = "3:1"
"OutputConfiguration" = "8:"
"OutputGroupCanonicalName" = "8:Symbols"
"OutputProjectGuid" = "8:{88E6522A-C68B-42C8-8B5E-9C959BA6C415}"
"ShowKeyOutput" = "11:TRUE"
"ExcludeFilters"
{
}
}
}
}
}
================================================
FILE: Readme.md
================================================
# Outlook File Drag
*Drag and drop Outlook items as files into any application*
## Read This First!
Microsoft Edge (as of Windows 10 1709) and Google Chrome (as of version 76)
natively support drag and drop from Outlook on Windows. If you use one of these
browsers, then this plugin is not necessary.
## Overview
Outlook File Drag is an add-in for Outlook 2013 and 2016 that allows you to drag
and drop Outlook items (messages, attachments, contacts, tasks, appointments,
meetings, etc) to applications that allow physical files to be dropped, such as
web browsers.
## How Does it Work?
When you try to drag and drop from Outlook, Outlook correctly identifies the
format as virtual files (CFSTR_FILEDESCRIPTORW) since the files do not exist
directly on disk. Instead, they are contained in a PST file, OST file, or on
an Exchange server.
However, many applications do not support this format, such as web browers and
most .NET/Java applications.
To work around this issue, Outlook File Drag hooks the Outlook drag and drop
process and adds support for physical files (CF_HDROP). When the receiving
application asks for the physical files, the files are saved to a temp folder
and those filenames are returned to the application. The application processes
the files (such as uploading them). Outlook File Drag deletes the temp files
later in a cleanup process.
## Features
- Works with Chrome, Firefox, Internet Explorer, Edge, and other applications that accept files to be dropped
- Allows drag and drop into HTML5-based web applications
- Drag e-mails, attachments, contacts, calendar items, and more
- Drag multiple items at once
- Supports Unicode characters
## Installation
To install, run the installer that matches your Windows build:
- [Download for 64-bit Windows (Outlook 32-bit or 64-bit)](https://github.com/tonyfederer/OutlookFileDrag/releases/download/v1.0.11/OutlookFileDragSetup_x64.zip)
- [Download for 32-bit Windows](https://github.com/tonyfederer/OutlookFileDrag/releases/download/v1.0.11/OutlookFileDragSetup.zip)
After installing, restart Outlook for the add-in to take effect.
## Automated (Silent) Installation
For administrators, OutlookFileDrag supports automated (silent) installation and uninstallation using `msiexec` with command line parameters.
### Silent Installation
To silently install OutlookFileDrag, use this command:
`msiexec.exe /i /qn /log `
- ``: Path to MSI file
- ``: Path to log file (if folder is not specified, MSI path is used)
Example:
`msiexec.exe C:\Install\OutlookFileDrag_x64.msi /qn /log C:\Logs\OutlookFileDragInstall.log`
After installing, restart Outlook for the add-in to take effect.
### Silent Uninstallation
To silently uninstall OutlookFileDrag, use this command:
`msiexec.exe /x /qn /log `
- `` for 64-bit version: `{CF5F9043-967C-400D-B6D5-F41AF6AD83AE}`
- `` for 32-bit version: `{7EA6E17B-8802-4E1F-9669-248670B31BFB}`
- ``: Path to log file
Example:
`msiexec.exe /x {CF5F9043-967C-400D-B6D5-F41AF6AD83AE} /qn /log C:\Logs\OutlookFileDragUninstall.log`
## Acknowledgements
Outlook File Drag uses these open source projects:
- [Easyhook](https://easyhook.github.io/)
- [log4net](http://logging.apache.org/log4net/)
## Feedback/Contribute
You can view the source code, report issues, and contribute on [Github](https://github.com/tonyfederer/OutlookFileDrag).
## Donate
If you find this project useful, please consider donating. Your donations are appreciated. =)
[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BSAGCF5VAJLN2)
## Version History
### 1.0.11
- Fixed drag and drop of embedded RTF attachments (thanks chrisv2)
### 1.0.10
- Fixed System.ArgumentException bug in ReadHGlobalIntoStream method when reading more than 4 KB introduced in version 1.0.8.
### 1.0.9
- If files were dropped and drop effect was "move", then override to "copy" so original item is not deleted
### 1.0.8
- Fixed releasing of unmanaged resources
- Memory usage improvements
- Added more details to log file
### 1.0.5
- Fixed crash when dragging calendar items
### 1.0.4
- Added additional debug logging
- Fixed issue where STGMEDIUM was not being released after reading filenames
- Fixed issue that where reading filenames sometimes failed
- Fixed hooking process to allow starting and stopping hook without disposing and recreating hook
### 1.0.3
- Fixed issue that prevented dragging items from one group to another
### 1.0.2
- Fixed PathTooLong exception when temporary filename was longer than MAX_PATH
### 1.0.1
- Fixed issues with 64-bit Outlook
- Added self-signed certificate
### 1.0
- Initial Release
## Copyright
Outlook File Drag is copyright (c) 2018 by [Tony Federer](https://github.com/tonyfederer) and released under the MIT License.
================================================
FILE: _config.yml
================================================
theme: jekyll-theme-cayman