mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-10-30 18:22:48 -04:00 
			
		
		
		
	Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser
This commit is contained in:
		
						commit
						cbb2f00da5
					
				| @ -2,7 +2,7 @@ | |||||||
| <configuration> | <configuration> | ||||||
|   <appSettings> |   <appSettings> | ||||||
|     <add key="product" value="server" /> |     <add key="product" value="server" /> | ||||||
|     <add key="class" value="Release" /> |     <add key="class" value="Dev" /> | ||||||
|   </appSettings> |   </appSettings> | ||||||
|     <startup>  |     <startup>  | ||||||
|         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> |         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> | ||||||
|  | |||||||
							
								
								
									
										276
									
								
								MediaBrowser.Installer/Code/ShellLinkNative.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										276
									
								
								MediaBrowser.Installer/Code/ShellLinkNative.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,276 @@ | |||||||
|  | /************************************************************************** | ||||||
|  | * | ||||||
|  | * Filename:     ShellLinkNative.cs | ||||||
|  | * Author:       Mattias Sjögren (mattias@mvps.org) | ||||||
|  | *               http://www.msjogren.net/dotnet/ | ||||||
|  | * | ||||||
|  | * Description:  Defines the native types used to manipulate shell shortcuts. | ||||||
|  | * | ||||||
|  | * Public types: enum SLR_FLAGS | ||||||
|  | *               enum SLGP_FLAGS | ||||||
|  | *               struct WIN32_FIND_DATA[A|W] | ||||||
|  | *               interface IPersistFile | ||||||
|  | *               interface IShellLink[A|W] | ||||||
|  | *               class ShellLink | ||||||
|  | * | ||||||
|  | * | ||||||
|  | * Copyright ©2001-2002, Mattias Sjögren | ||||||
|  | *  | ||||||
|  | **************************************************************************/ | ||||||
|  | 
 | ||||||
|  | using System; | ||||||
|  | using System.Text; | ||||||
|  | using System.Runtime.InteropServices; | ||||||
|  | 
 | ||||||
|  | namespace MediaBrowser.Installer.Code | ||||||
|  | { | ||||||
|  |   // IShellLink.Resolve fFlags | ||||||
|  |   [Flags()] | ||||||
|  |   public enum SLR_FLAGS | ||||||
|  |   { | ||||||
|  |     SLR_NO_UI = 0x1, | ||||||
|  |     SLR_ANY_MATCH = 0x2, | ||||||
|  |     SLR_UPDATE = 0x4, | ||||||
|  |     SLR_NOUPDATE = 0x8, | ||||||
|  |     SLR_NOSEARCH = 0x10, | ||||||
|  |     SLR_NOTRACK = 0x20, | ||||||
|  |     SLR_NOLINKINFO = 0x40, | ||||||
|  |     SLR_INVOKE_MSI = 0x80 | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // IShellLink.GetPath fFlags | ||||||
|  |   [Flags()] | ||||||
|  |   public enum SLGP_FLAGS | ||||||
|  |   { | ||||||
|  |     SLGP_SHORTPATH = 0x1, | ||||||
|  |     SLGP_UNCPRIORITY = 0x2, | ||||||
|  |     SLGP_RAWPATH = 0x4 | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   [StructLayoutAttribute(LayoutKind.Sequential, CharSet=CharSet.Ansi)] | ||||||
|  |   public struct WIN32_FIND_DATAA | ||||||
|  |   { | ||||||
|  |     public int dwFileAttributes; | ||||||
|  |     public FILETIME ftCreationTime; | ||||||
|  |     public FILETIME ftLastAccessTime; | ||||||
|  |     public FILETIME ftLastWriteTime; | ||||||
|  |     public int nFileSizeHigh; | ||||||
|  |     public int nFileSizeLow; | ||||||
|  |     public int dwReserved0; | ||||||
|  |     public int dwReserved1; | ||||||
|  |     [MarshalAs(UnmanagedType.ByValTStr, SizeConst=MAX_PATH)] | ||||||
|  |     public string cFileName; | ||||||
|  |     [MarshalAs(UnmanagedType.ByValTStr, SizeConst=14)] | ||||||
|  |     public string cAlternateFileName; | ||||||
|  |     private const int MAX_PATH = 260; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   [StructLayoutAttribute(LayoutKind.Sequential, CharSet=CharSet.Unicode)] | ||||||
|  |   public struct WIN32_FIND_DATAW | ||||||
|  |   { | ||||||
|  |     public int dwFileAttributes; | ||||||
|  |     public FILETIME ftCreationTime; | ||||||
|  |     public FILETIME ftLastAccessTime; | ||||||
|  |     public FILETIME ftLastWriteTime; | ||||||
|  |     public int nFileSizeHigh; | ||||||
|  |     public int nFileSizeLow; | ||||||
|  |     public int dwReserved0; | ||||||
|  |     public int dwReserved1; | ||||||
|  |     [MarshalAs(UnmanagedType.ByValTStr, SizeConst=MAX_PATH)] | ||||||
|  |     public string cFileName; | ||||||
|  |     [MarshalAs(UnmanagedType.ByValTStr, SizeConst=14)] | ||||||
|  |     public string cAlternateFileName; | ||||||
|  |     private const int MAX_PATH = 260; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   [ | ||||||
|  |     ComImport(), | ||||||
|  |     InterfaceType(ComInterfaceType.InterfaceIsIUnknown), | ||||||
|  |     Guid("0000010B-0000-0000-C000-000000000046") | ||||||
|  |   ] | ||||||
|  |   public interface IPersistFile | ||||||
|  |   { | ||||||
|  |     #region Methods inherited from IPersist | ||||||
|  | 
 | ||||||
|  |     void GetClassID( | ||||||
|  |       out Guid pClassID); | ||||||
|  | 
 | ||||||
|  |     #endregion | ||||||
|  | 
 | ||||||
|  |     [PreserveSig()] | ||||||
|  |     int IsDirty(); | ||||||
|  | 
 | ||||||
|  |     void Load( | ||||||
|  |       [MarshalAs(UnmanagedType.LPWStr)] string pszFileName, | ||||||
|  |       int dwMode); | ||||||
|  | 
 | ||||||
|  |     void Save( | ||||||
|  |       [MarshalAs(UnmanagedType.LPWStr)] string pszFileName, | ||||||
|  |       [MarshalAs(UnmanagedType.Bool)] bool fRemember); | ||||||
|  | 
 | ||||||
|  |     void SaveCompleted( | ||||||
|  |       [MarshalAs(UnmanagedType.LPWStr)] string pszFileName); | ||||||
|  | 
 | ||||||
|  |     void GetCurFile( | ||||||
|  |       out IntPtr ppszFileName); | ||||||
|  | 
 | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   [ | ||||||
|  |     ComImport(), | ||||||
|  |     InterfaceType(ComInterfaceType.InterfaceIsIUnknown), | ||||||
|  |     Guid("000214EE-0000-0000-C000-000000000046") | ||||||
|  |   ] | ||||||
|  |   public interface IShellLinkA | ||||||
|  |   { | ||||||
|  |     void GetPath( | ||||||
|  |       [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszFile, | ||||||
|  |       int cchMaxPath, | ||||||
|  |       out WIN32_FIND_DATAA pfd, | ||||||
|  |       SLGP_FLAGS fFlags); | ||||||
|  | 
 | ||||||
|  |     void GetIDList( | ||||||
|  |       out IntPtr ppidl); | ||||||
|  | 
 | ||||||
|  |     void SetIDList( | ||||||
|  |       IntPtr pidl); | ||||||
|  | 
 | ||||||
|  |     void GetDescription( | ||||||
|  |       [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszName, | ||||||
|  |       int cchMaxName); | ||||||
|  | 
 | ||||||
|  |     void SetDescription( | ||||||
|  |       [MarshalAs(UnmanagedType.LPStr)] string pszName); | ||||||
|  | 
 | ||||||
|  |     void GetWorkingDirectory( | ||||||
|  |       [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszDir, | ||||||
|  |       int cchMaxPath); | ||||||
|  | 
 | ||||||
|  |     void SetWorkingDirectory( | ||||||
|  |       [MarshalAs(UnmanagedType.LPStr)] string pszDir); | ||||||
|  | 
 | ||||||
|  |     void GetArguments( | ||||||
|  |       [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszArgs, | ||||||
|  |       int cchMaxPath); | ||||||
|  | 
 | ||||||
|  |     void SetArguments( | ||||||
|  |       [MarshalAs(UnmanagedType.LPStr)] string pszArgs); | ||||||
|  | 
 | ||||||
|  |     void GetHotkey( | ||||||
|  |       out short pwHotkey); | ||||||
|  | 
 | ||||||
|  |     void SetHotkey( | ||||||
|  |       short wHotkey); | ||||||
|  | 
 | ||||||
|  |     void GetShowCmd( | ||||||
|  |       out int piShowCmd); | ||||||
|  | 
 | ||||||
|  |     void SetShowCmd( | ||||||
|  |       int iShowCmd); | ||||||
|  | 
 | ||||||
|  |     void GetIconLocation( | ||||||
|  |       [Out(), MarshalAs(UnmanagedType.LPStr)] StringBuilder pszIconPath, | ||||||
|  |       int cchIconPath, | ||||||
|  |       out int piIcon); | ||||||
|  | 
 | ||||||
|  |     void SetIconLocation( | ||||||
|  |       [MarshalAs(UnmanagedType.LPStr)] string pszIconPath, | ||||||
|  |       int iIcon); | ||||||
|  | 
 | ||||||
|  |     void SetRelativePath( | ||||||
|  |       [MarshalAs(UnmanagedType.LPStr)] string pszPathRel, | ||||||
|  |       int dwReserved); | ||||||
|  | 
 | ||||||
|  |     void Resolve( | ||||||
|  |       IntPtr hwnd, | ||||||
|  |       SLR_FLAGS fFlags); | ||||||
|  | 
 | ||||||
|  |     void SetPath( | ||||||
|  |       [MarshalAs(UnmanagedType.LPStr)] string pszFile); | ||||||
|  | 
 | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   [ | ||||||
|  |     ComImport(), | ||||||
|  |     InterfaceType(ComInterfaceType.InterfaceIsIUnknown), | ||||||
|  |     Guid("000214F9-0000-0000-C000-000000000046") | ||||||
|  |   ] | ||||||
|  |   public interface IShellLinkW | ||||||
|  |   { | ||||||
|  |     void GetPath( | ||||||
|  |       [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, | ||||||
|  |       int cchMaxPath, | ||||||
|  |       out WIN32_FIND_DATAW pfd, | ||||||
|  |       SLGP_FLAGS fFlags); | ||||||
|  | 
 | ||||||
|  |     void GetIDList( | ||||||
|  |       out IntPtr ppidl); | ||||||
|  | 
 | ||||||
|  |     void SetIDList( | ||||||
|  |       IntPtr pidl); | ||||||
|  | 
 | ||||||
|  |     void GetDescription( | ||||||
|  |       [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, | ||||||
|  |       int cchMaxName); | ||||||
|  | 
 | ||||||
|  |     void SetDescription( | ||||||
|  |       [MarshalAs(UnmanagedType.LPWStr)] string pszName); | ||||||
|  | 
 | ||||||
|  |     void GetWorkingDirectory( | ||||||
|  |       [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, | ||||||
|  |       int cchMaxPath); | ||||||
|  | 
 | ||||||
|  |     void SetWorkingDirectory( | ||||||
|  |       [MarshalAs(UnmanagedType.LPWStr)] string pszDir); | ||||||
|  | 
 | ||||||
|  |     void GetArguments( | ||||||
|  |       [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, | ||||||
|  |       int cchMaxPath); | ||||||
|  | 
 | ||||||
|  |     void SetArguments( | ||||||
|  |       [MarshalAs(UnmanagedType.LPWStr)] string pszArgs); | ||||||
|  | 
 | ||||||
|  |     void GetHotkey( | ||||||
|  |       out short pwHotkey); | ||||||
|  | 
 | ||||||
|  |     void SetHotkey( | ||||||
|  |       short wHotkey); | ||||||
|  | 
 | ||||||
|  |     void GetShowCmd( | ||||||
|  |       out int piShowCmd); | ||||||
|  | 
 | ||||||
|  |     void SetShowCmd( | ||||||
|  |       int iShowCmd); | ||||||
|  | 
 | ||||||
|  |     void GetIconLocation( | ||||||
|  |       [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, | ||||||
|  |       int cchIconPath, | ||||||
|  |       out int piIcon); | ||||||
|  | 
 | ||||||
|  |     void SetIconLocation( | ||||||
|  |       [MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, | ||||||
|  |       int iIcon); | ||||||
|  | 
 | ||||||
|  |     void SetRelativePath( | ||||||
|  |       [MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, | ||||||
|  |       int dwReserved); | ||||||
|  | 
 | ||||||
|  |     void Resolve( | ||||||
|  |       IntPtr hwnd, | ||||||
|  |       SLR_FLAGS fFlags); | ||||||
|  | 
 | ||||||
|  |     void SetPath( | ||||||
|  |       [MarshalAs(UnmanagedType.LPWStr)] string pszFile); | ||||||
|  | 
 | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   [ | ||||||
|  |     ComImport(), | ||||||
|  |     Guid("00021401-0000-0000-C000-000000000046") | ||||||
|  |   ] | ||||||
|  |   public class ShellLink  // : IPersistFile, IShellLinkA, IShellLinkW  | ||||||
|  |   { | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										348
									
								
								MediaBrowser.Installer/Code/ShellShortcut.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										348
									
								
								MediaBrowser.Installer/Code/ShellShortcut.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,348 @@ | |||||||
|  | /************************************************************************** | ||||||
|  | * | ||||||
|  | * Filename:     ShellShortcut.cs | ||||||
|  | * Author:       Mattias Sjögren (mattias@mvps.org) | ||||||
|  | *               http://www.msjogren.net/dotnet/ | ||||||
|  | * | ||||||
|  | * Description:  Defines a .NET friendly class, ShellShortcut, for reading | ||||||
|  | *               and writing shortcuts. | ||||||
|  | *               Define the conditional compilation symbol UNICODE to use | ||||||
|  | *               IShellLinkW internally. | ||||||
|  | * | ||||||
|  | * Public types: class ShellShortcut | ||||||
|  | * | ||||||
|  | * | ||||||
|  | * Dependencies: ShellLinkNative.cs | ||||||
|  | * | ||||||
|  | * | ||||||
|  | * Copyright ©2001-2002, Mattias Sjögren | ||||||
|  | *  | ||||||
|  | **************************************************************************/ | ||||||
|  | 
 | ||||||
|  | using System; | ||||||
|  | using System.Diagnostics; | ||||||
|  | using System.Drawing; | ||||||
|  | using System.IO; | ||||||
|  | using System.Runtime.InteropServices; | ||||||
|  | using System.Text; | ||||||
|  | using System.Windows.Forms; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace MediaBrowser.Installer.Code | ||||||
|  | { | ||||||
|  | 	/// <remarks> | ||||||
|  | 	///   .NET friendly wrapper for the ShellLink class | ||||||
|  | 	/// </remarks> | ||||||
|  | 	public class ShellShortcut : IDisposable | ||||||
|  | 	{ | ||||||
|  |     private const int INFOTIPSIZE = 1024; | ||||||
|  |     private const int MAX_PATH = 260; | ||||||
|  | 
 | ||||||
|  |     private const int SW_SHOWNORMAL = 1; | ||||||
|  |     private const int SW_SHOWMINIMIZED = 2; | ||||||
|  |     private const int SW_SHOWMAXIMIZED = 3; | ||||||
|  |     private const int SW_SHOWMINNOACTIVE = 7; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   #if UNICODE | ||||||
|  |     private IShellLinkW m_Link; | ||||||
|  |   #else | ||||||
|  |     private IShellLinkA m_Link; | ||||||
|  |   #endif | ||||||
|  |     private string m_sPath; | ||||||
|  | 
 | ||||||
|  |     /// | ||||||
|  |     /// <param name='linkPath'> | ||||||
|  |     ///   Path to new or existing shortcut file (.lnk). | ||||||
|  |     /// </param> | ||||||
|  |     /// | ||||||
|  |     public ShellShortcut(string linkPath) | ||||||
|  |     { | ||||||
|  |       IPersistFile pf; | ||||||
|  | 
 | ||||||
|  |       m_sPath = linkPath; | ||||||
|  | 
 | ||||||
|  |     #if UNICODE | ||||||
|  |       m_Link = (IShellLinkW) new ShellLink(); | ||||||
|  |     #else | ||||||
|  |       m_Link = (IShellLinkA) new ShellLink(); | ||||||
|  |     #endif | ||||||
|  | 
 | ||||||
|  |       if ( File.Exists( linkPath ) ) { | ||||||
|  |         pf = (IPersistFile)m_Link; | ||||||
|  |         pf.Load( linkPath, 0 ); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // | ||||||
|  |     //  IDisplosable implementation | ||||||
|  |     // | ||||||
|  |     public void Dispose() | ||||||
|  |     { | ||||||
|  |       if ( m_Link != null ) { | ||||||
|  |         Marshal.ReleaseComObject( m_Link ); | ||||||
|  |         m_Link = null; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <value> | ||||||
|  |     ///   Gets or sets the argument list of the shortcut. | ||||||
|  |     /// </value> | ||||||
|  |     public string Arguments | ||||||
|  |     { | ||||||
|  |       get | ||||||
|  |       { | ||||||
|  |         StringBuilder sb = new StringBuilder( INFOTIPSIZE ); | ||||||
|  |         m_Link.GetArguments( sb, sb.Capacity ); | ||||||
|  |         return sb.ToString(); | ||||||
|  |       } | ||||||
|  |       set { m_Link.SetArguments( value ); } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <value> | ||||||
|  |     ///   Gets or sets a description of the shortcut. | ||||||
|  |     /// </value> | ||||||
|  |     public string Description | ||||||
|  |     { | ||||||
|  |       get | ||||||
|  |       { | ||||||
|  |         StringBuilder sb = new StringBuilder( INFOTIPSIZE ); | ||||||
|  |         m_Link.GetDescription( sb, sb.Capacity ); | ||||||
|  |         return sb.ToString(); | ||||||
|  |       } | ||||||
|  |       set { m_Link.SetDescription( value ); } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <value> | ||||||
|  |     ///   Gets or sets the working directory (aka start in directory) of the shortcut. | ||||||
|  |     /// </value> | ||||||
|  |     public string WorkingDirectory | ||||||
|  |     { | ||||||
|  |       get | ||||||
|  |       { | ||||||
|  |         StringBuilder sb = new StringBuilder( MAX_PATH ); | ||||||
|  |         m_Link.GetWorkingDirectory( sb, sb.Capacity ); | ||||||
|  |         return sb.ToString(); | ||||||
|  |       } | ||||||
|  |       set { m_Link.SetWorkingDirectory( value ); } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // | ||||||
|  |     // If Path returns an empty string, the shortcut is associated with | ||||||
|  |     // a PIDL instead, which can be retrieved with IShellLink.GetIDList(). | ||||||
|  |     // This is beyond the scope of this wrapper class. | ||||||
|  |     // | ||||||
|  |     /// <value> | ||||||
|  |     ///   Gets or sets the target path of the shortcut. | ||||||
|  |     /// </value> | ||||||
|  |     public string Path | ||||||
|  |     { | ||||||
|  |       get | ||||||
|  |       { | ||||||
|  |       #if UNICODE | ||||||
|  |         WIN32_FIND_DATAW wfd = new WIN32_FIND_DATAW(); | ||||||
|  |       #else | ||||||
|  |         WIN32_FIND_DATAA wfd = new WIN32_FIND_DATAA(); | ||||||
|  |       #endif | ||||||
|  |         StringBuilder sb = new StringBuilder( MAX_PATH ); | ||||||
|  | 
 | ||||||
|  |         m_Link.GetPath( sb, sb.Capacity, out wfd, SLGP_FLAGS.SLGP_UNCPRIORITY ); | ||||||
|  |         return sb.ToString(); | ||||||
|  |       } | ||||||
|  |       set { m_Link.SetPath( value ); } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <value> | ||||||
|  |     ///   Gets or sets the path of the <see cref="Icon"/> assigned to the shortcut. | ||||||
|  |     /// </value> | ||||||
|  |     /// <summary> | ||||||
|  |     ///   <seealso cref="IconIndex"/> | ||||||
|  |     /// </summary> | ||||||
|  |     public string IconPath | ||||||
|  |     { | ||||||
|  |       get | ||||||
|  |       { | ||||||
|  |         StringBuilder sb = new StringBuilder( MAX_PATH ); | ||||||
|  |         int nIconIdx; | ||||||
|  |         m_Link.GetIconLocation( sb, sb.Capacity, out nIconIdx ); | ||||||
|  |         return sb.ToString(); | ||||||
|  |       } | ||||||
|  |       set { m_Link.SetIconLocation( value, IconIndex ); } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <value> | ||||||
|  |     ///   Gets or sets the index of the <see cref="Icon"/> assigned to the shortcut. | ||||||
|  |     ///   Set to zero when the <see cref="IconPath"/> property specifies a .ICO file. | ||||||
|  |     /// </value> | ||||||
|  |     /// <summary> | ||||||
|  |     ///   <seealso cref="IconPath"/> | ||||||
|  |     /// </summary> | ||||||
|  |     public int IconIndex | ||||||
|  |     { | ||||||
|  |       get | ||||||
|  |       { | ||||||
|  |         StringBuilder sb = new StringBuilder( MAX_PATH ); | ||||||
|  |         int nIconIdx; | ||||||
|  |         m_Link.GetIconLocation( sb, sb.Capacity, out nIconIdx ); | ||||||
|  |         return nIconIdx; | ||||||
|  |       } | ||||||
|  |       set { m_Link.SetIconLocation( IconPath, value ); } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <value> | ||||||
|  |     ///   Retrieves the Icon of the shortcut as it will appear in Explorer. | ||||||
|  |     ///   Use the <see cref="IconPath"/> and <see cref="IconIndex"/> | ||||||
|  |     ///   properties to change it. | ||||||
|  |     /// </value> | ||||||
|  |     public Icon Icon | ||||||
|  |     { | ||||||
|  |       get | ||||||
|  |       { | ||||||
|  |         StringBuilder sb = new StringBuilder( MAX_PATH ); | ||||||
|  |         int nIconIdx; | ||||||
|  |         IntPtr hIcon, hInst; | ||||||
|  |         Icon ico, clone; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         m_Link.GetIconLocation( sb, sb.Capacity, out nIconIdx ); | ||||||
|  |         hInst = Marshal.GetHINSTANCE( this.GetType().Module ); | ||||||
|  |         hIcon = Native.ExtractIcon( hInst, sb.ToString(), nIconIdx ); | ||||||
|  |         if ( hIcon == IntPtr.Zero ) | ||||||
|  |           return null; | ||||||
|  | 
 | ||||||
|  |         // Return a cloned Icon, because we have to free the original ourselves. | ||||||
|  |         ico = Icon.FromHandle( hIcon ); | ||||||
|  |         clone = (Icon)ico.Clone(); | ||||||
|  |         ico.Dispose(); | ||||||
|  |         Native.DestroyIcon( hIcon ); | ||||||
|  |         return clone; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <value> | ||||||
|  |     ///   Gets or sets the System.Diagnostics.ProcessWindowStyle value | ||||||
|  |     ///   that decides the initial show state of the shortcut target. Note that | ||||||
|  |     ///   ProcessWindowStyle.Hidden is not a valid property value. | ||||||
|  |     /// </value> | ||||||
|  |     public ProcessWindowStyle WindowStyle | ||||||
|  |     { | ||||||
|  |       get | ||||||
|  |       { | ||||||
|  |         int nWS; | ||||||
|  |         m_Link.GetShowCmd( out nWS ); | ||||||
|  | 
 | ||||||
|  |         switch ( nWS ) { | ||||||
|  |           case SW_SHOWMINIMIZED: | ||||||
|  |           case SW_SHOWMINNOACTIVE: | ||||||
|  |             return ProcessWindowStyle.Minimized; | ||||||
|  |            | ||||||
|  |           case SW_SHOWMAXIMIZED: | ||||||
|  |             return ProcessWindowStyle.Maximized; | ||||||
|  | 
 | ||||||
|  |           default: | ||||||
|  |             return ProcessWindowStyle.Normal; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       set | ||||||
|  |       { | ||||||
|  |         int nWS; | ||||||
|  | 
 | ||||||
|  |         switch ( value ) { | ||||||
|  |           case ProcessWindowStyle.Normal: | ||||||
|  |             nWS = SW_SHOWNORMAL; | ||||||
|  |             break; | ||||||
|  | 
 | ||||||
|  |           case ProcessWindowStyle.Minimized: | ||||||
|  |             nWS = SW_SHOWMINNOACTIVE; | ||||||
|  |             break; | ||||||
|  | 
 | ||||||
|  |           case ProcessWindowStyle.Maximized: | ||||||
|  |             nWS = SW_SHOWMAXIMIZED; | ||||||
|  |             break; | ||||||
|  | 
 | ||||||
|  |           default: // ProcessWindowStyle.Hidden | ||||||
|  |             throw new ArgumentException("Unsupported ProcessWindowStyle value."); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         m_Link.SetShowCmd( nWS ); | ||||||
|  |        | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <value> | ||||||
|  |     ///   Gets or sets the hotkey for the shortcut. | ||||||
|  |     /// </value> | ||||||
|  |     public Keys Hotkey | ||||||
|  |     { | ||||||
|  |       get | ||||||
|  |       { | ||||||
|  |         short wHotkey; | ||||||
|  |         int dwHotkey; | ||||||
|  | 
 | ||||||
|  |         m_Link.GetHotkey( out wHotkey ); | ||||||
|  | 
 | ||||||
|  |         // | ||||||
|  |         // Convert from IShellLink 16-bit format to Keys enumeration 32-bit value | ||||||
|  |         // IShellLink: 0xMMVK | ||||||
|  |         // Keys:  0x00MM00VK         | ||||||
|  |         //   MM = Modifier (Alt, Control, Shift) | ||||||
|  |         //   VK = Virtual key code | ||||||
|  |         //        | ||||||
|  |         dwHotkey = ((wHotkey & 0xFF00) << 8) | (wHotkey & 0xFF); | ||||||
|  |         return (Keys) dwHotkey; | ||||||
|  |       } | ||||||
|  |       set | ||||||
|  |       { | ||||||
|  |         short wHotkey; | ||||||
|  | 
 | ||||||
|  |         if ( (value & Keys.Modifiers) == 0 ) | ||||||
|  |           throw new ArgumentException("Hotkey must include a modifier key."); | ||||||
|  | 
 | ||||||
|  |         //     | ||||||
|  |         // Convert from Keys enumeration 32-bit value to IShellLink 16-bit format | ||||||
|  |         // IShellLink: 0xMMVK | ||||||
|  |         // Keys:  0x00MM00VK         | ||||||
|  |         //   MM = Modifier (Alt, Control, Shift) | ||||||
|  |         //   VK = Virtual key code | ||||||
|  |         //        | ||||||
|  |         wHotkey = unchecked((short) ( ((int) (value & Keys.Modifiers) >> 8) | (int) (value & Keys.KeyCode) )); | ||||||
|  |         m_Link.SetHotkey( wHotkey ); | ||||||
|  | 
 | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <summary> | ||||||
|  |     ///   Saves the shortcut to disk. | ||||||
|  |     /// </summary> | ||||||
|  |     public void Save() | ||||||
|  |     { | ||||||
|  |       IPersistFile pf = (IPersistFile) m_Link; | ||||||
|  |       pf.Save( m_sPath, true ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <summary> | ||||||
|  |     ///   Returns a reference to the internal ShellLink object, | ||||||
|  |     ///   which can be used to perform more advanced operations | ||||||
|  |     ///   not supported by this wrapper class, by using the | ||||||
|  |     ///   IShellLink interface directly. | ||||||
|  |     /// </summary> | ||||||
|  |     public object ShellLink | ||||||
|  |     { | ||||||
|  |       get { return m_Link; } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   #region Native Win32 API functions | ||||||
|  |     private class Native | ||||||
|  |     { | ||||||
|  |       [DllImport("shell32.dll", CharSet=CharSet.Auto)] | ||||||
|  |       public static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex); | ||||||
|  | 
 | ||||||
|  |       [DllImport("user32.dll")] | ||||||
|  |       public static extern bool DestroyIcon(IntPtr hIcon); | ||||||
|  |     } | ||||||
|  |   #endregion | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -10,7 +10,6 @@ using System.Linq; | |||||||
| using Ionic.Zip; | using Ionic.Zip; | ||||||
| using MediaBrowser.Installer.Code; | using MediaBrowser.Installer.Code; | ||||||
| using ServiceStack.Text; | using ServiceStack.Text; | ||||||
| using IWshRuntimeLibrary; |  | ||||||
| 
 | 
 | ||||||
| namespace MediaBrowser.Installer | namespace MediaBrowser.Installer | ||||||
| { | { | ||||||
| @ -124,7 +123,7 @@ namespace MediaBrowser.Installer | |||||||
|             var fullPath = Path.Combine(RootPath, "System", TargetExe); |             var fullPath = Path.Combine(RootPath, "System", TargetExe); | ||||||
|             try |             try | ||||||
|             { |             { | ||||||
|                 CreateShortcut(fullPath); |                 CreateShortcuts(fullPath); | ||||||
|             } |             } | ||||||
|             catch (Exception e) |             catch (Exception e) | ||||||
|             { |             { | ||||||
| @ -155,7 +154,7 @@ namespace MediaBrowser.Installer | |||||||
|                     var json = await client.DownloadStringTaskAsync("http://www.mb3admin.com/admin/service/package/retrieveAll?name=" + PackageName); |                     var json = await client.DownloadStringTaskAsync("http://www.mb3admin.com/admin/service/package/retrieveAll?name=" + PackageName); | ||||||
|                     var packages = JsonSerializer.DeserializeFromString<List<PackageInfo>>(json); |                     var packages = JsonSerializer.DeserializeFromString<List<PackageInfo>>(json); | ||||||
| 
 | 
 | ||||||
|                     var version = packages[0].versions.Where(v => v.classification == PackageClass).OrderByDescending(v => v.version).FirstOrDefault(v => v.version <= PackageVersion); |                     var version = packages[0].versions.Where(v => v.classification <= PackageClass).OrderByDescending(v => v.version).FirstOrDefault(v => v.version <= PackageVersion); | ||||||
|                     if (version == null) |                     if (version == null) | ||||||
|                     { |                     { | ||||||
|                         SystemClose("Could not locate download package.  Aborting."); |                         SystemClose("Could not locate download package.  Aborting."); | ||||||
| @ -225,21 +224,24 @@ namespace MediaBrowser.Installer | |||||||
|         ///  Only do current user to avoid need for admin elevation |         ///  Only do current user to avoid need for admin elevation | ||||||
|         /// </summary> |         /// </summary> | ||||||
|         /// <param name="targetExe"></param> |         /// <param name="targetExe"></param> | ||||||
|         protected void CreateShortcut(string targetExe) |         protected void CreateShortcuts(string targetExe) | ||||||
|         { |         { | ||||||
|             // get path to all users start menu |             // get path to all users start menu | ||||||
|             var shell = new WshShell(); |             var startMenu = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu),"Media Browser 3"); | ||||||
|             var startMenu = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu),"Media Browser"); |  | ||||||
|             if (!Directory.Exists(startMenu)) Directory.CreateDirectory(startMenu); |             if (!Directory.Exists(startMenu)) Directory.CreateDirectory(startMenu); | ||||||
|             var product = (IWshShortcut)shell.CreateShortcut(Path.Combine(startMenu, FriendlyName+".lnk")); |             var product = new ShellShortcut(Path.Combine(startMenu, FriendlyName+".lnk")) {Path = targetExe, Description = "Run " + FriendlyName}; | ||||||
|             product.TargetPath = targetExe; |  | ||||||
|             product.Description = "Run " + FriendlyName; |  | ||||||
|             product.Save(); |             product.Save(); | ||||||
| 
 | 
 | ||||||
|             var uninstall = (IWshShortcut)shell.CreateShortcut(Path.Combine(startMenu, "Uninstall " + FriendlyName + ".lnk")); |             if (PackageName == "MBServer") | ||||||
|             uninstall.TargetPath = Path.Combine(Path.GetDirectoryName(targetExe),"MediaBrowser.Uninstaller.exe"); |             { | ||||||
|             uninstall.Arguments = (PackageName == "MBServer" ? "server" : "mbt"); |                 var path = Path.Combine(startMenu, "MB Dashboard.lnk"); | ||||||
|             uninstall.Description = "Uninstall " + FriendlyName; |                 var dashboard = new ShellShortcut(path)  | ||||||
|  |                 {Path = @"http://localhost:8096/mediabrowser/dashboard/dashboard.html", Description = "Open the Media Browser Server Dashboard (configuration)"}; | ||||||
|  |                 dashboard.Save(); | ||||||
|  |                  | ||||||
|  |             } | ||||||
|  |             var uninstall = new ShellShortcut(Path.Combine(startMenu, "Uninstall " + FriendlyName + ".lnk"))  | ||||||
|  |             {Path = Path.Combine(Path.GetDirectoryName(targetExe), "MediaBrowser.Uninstaller.exe"), Arguments = (PackageName == "MBServer" ? "server" : "mbt"), Description = "Uninstall " + FriendlyName}; | ||||||
|             uninstall.Save(); |             uninstall.Save(); | ||||||
| 
 | 
 | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ | |||||||
|     <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> |     <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> | ||||||
|     <WarningLevel>4</WarningLevel> |     <WarningLevel>4</WarningLevel> | ||||||
|     <IsWebBootstrapper>true</IsWebBootstrapper> |     <IsWebBootstrapper>true</IsWebBootstrapper> | ||||||
|     <PublishUrl>http://www.mb3admin.com/downloads/beta/server/</PublishUrl> |     <PublishUrl>http://www.mb3admin.com/downloads/dev/server/</PublishUrl> | ||||||
|     <Install>false</Install> |     <Install>false</Install> | ||||||
|     <InstallFrom>Web</InstallFrom> |     <InstallFrom>Web</InstallFrom> | ||||||
|     <UpdateEnabled>false</UpdateEnabled> |     <UpdateEnabled>false</UpdateEnabled> | ||||||
| @ -29,7 +29,7 @@ | |||||||
|     <PublisherName>Media Browser Team</PublisherName> |     <PublisherName>Media Browser Team</PublisherName> | ||||||
|     <SuiteName>Media Browser</SuiteName> |     <SuiteName>Media Browser</SuiteName> | ||||||
|     <OpenBrowserOnPublish>false</OpenBrowserOnPublish> |     <OpenBrowserOnPublish>false</OpenBrowserOnPublish> | ||||||
|     <ApplicationRevision>14</ApplicationRevision> |     <ApplicationRevision>16</ApplicationRevision> | ||||||
|     <ApplicationVersion>0.1.1.%2a</ApplicationVersion> |     <ApplicationVersion>0.1.1.%2a</ApplicationVersion> | ||||||
|     <UseApplicationTrust>false</UseApplicationTrust> |     <UseApplicationTrust>false</UseApplicationTrust> | ||||||
|     <PublishWizardCompleted>true</PublishWizardCompleted> |     <PublishWizardCompleted>true</PublishWizardCompleted> | ||||||
| @ -85,7 +85,9 @@ | |||||||
|     <Reference Include="System" /> |     <Reference Include="System" /> | ||||||
|     <Reference Include="System.Configuration" /> |     <Reference Include="System.Configuration" /> | ||||||
|     <Reference Include="System.Data" /> |     <Reference Include="System.Data" /> | ||||||
|  |     <Reference Include="System.Drawing" /> | ||||||
|     <Reference Include="System.Web" /> |     <Reference Include="System.Web" /> | ||||||
|  |     <Reference Include="System.Windows.Forms" /> | ||||||
|     <Reference Include="System.Xml" /> |     <Reference Include="System.Xml" /> | ||||||
|     <Reference Include="Microsoft.CSharp" /> |     <Reference Include="Microsoft.CSharp" /> | ||||||
|     <Reference Include="System.Core" /> |     <Reference Include="System.Core" /> | ||||||
| @ -126,6 +128,8 @@ | |||||||
|     <Compile Include="Code\PackageType.cs" /> |     <Compile Include="Code\PackageType.cs" /> | ||||||
|     <Compile Include="Code\PackageVersionClass.cs" /> |     <Compile Include="Code\PackageVersionClass.cs" /> | ||||||
|     <Compile Include="Code\PackageVersionInfo.cs" /> |     <Compile Include="Code\PackageVersionInfo.cs" /> | ||||||
|  |     <Compile Include="Code\ShellLinkNative.cs" /> | ||||||
|  |     <Compile Include="Code\ShellShortcut.cs" /> | ||||||
|     <Compile Include="MainWindow.xaml.cs"> |     <Compile Include="MainWindow.xaml.cs"> | ||||||
|       <DependentUpon>MainWindow.xaml</DependentUpon> |       <DependentUpon>MainWindow.xaml</DependentUpon> | ||||||
|       <SubType>Code</SubType> |       <SubType>Code</SubType> | ||||||
| @ -149,7 +153,9 @@ | |||||||
|       <Generator>ResXFileCodeGenerator</Generator> |       <Generator>ResXFileCodeGenerator</Generator> | ||||||
|       <LastGenOutput>Resources.Designer.cs</LastGenOutput> |       <LastGenOutput>Resources.Designer.cs</LastGenOutput> | ||||||
|     </EmbeddedResource> |     </EmbeddedResource> | ||||||
|     <None Include="mbt.config" /> |     <None Include="mbt.config"> | ||||||
|  |       <SubType>Designer</SubType> | ||||||
|  |     </None> | ||||||
|     <None Include="MediaBrowser.Installer_1_TemporaryKey.pfx" /> |     <None Include="MediaBrowser.Installer_1_TemporaryKey.pfx" /> | ||||||
|     <None Include="Properties\app.manifest" /> |     <None Include="Properties\app.manifest" /> | ||||||
|     <None Include="Properties\Settings.settings"> |     <None Include="Properties\Settings.settings"> | ||||||
| @ -159,7 +165,9 @@ | |||||||
|     <AppDesigner Include="Properties\" /> |     <AppDesigner Include="Properties\" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <None Include="App.config" /> |     <None Include="App.config"> | ||||||
|  |       <SubType>Designer</SubType> | ||||||
|  |     </None> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <BootstrapperPackage Include=".NETFramework,Version=v4.5"> |     <BootstrapperPackage Include=".NETFramework,Version=v4.5"> | ||||||
| @ -190,17 +198,6 @@ | |||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <Resource Include="Code\Images\mb3logo800.png" /> |     <Resource Include="Code\Images\mb3logo800.png" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |  | ||||||
|     <COMReference Include="IWshRuntimeLibrary"> |  | ||||||
|       <Guid>{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}</Guid> |  | ||||||
|       <VersionMajor>1</VersionMajor> |  | ||||||
|       <VersionMinor>0</VersionMinor> |  | ||||||
|       <Lcid>0</Lcid> |  | ||||||
|       <WrapperTool>tlbimp</WrapperTool> |  | ||||||
|       <Isolated>False</Isolated> |  | ||||||
|       <EmbedInteropTypes>True</EmbedInteropTypes> |  | ||||||
|     </COMReference> |  | ||||||
|   </ItemGroup> |  | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <Resource Include="Icon.ico" /> |     <Resource Include="Icon.ico" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| using ProtoBuf; | using MediaBrowser.Model.Updates; | ||||||
|  | using ProtoBuf; | ||||||
| 
 | 
 | ||||||
| namespace MediaBrowser.Model.Configuration | namespace MediaBrowser.Model.Configuration | ||||||
| { | { | ||||||
| @ -38,6 +39,12 @@ namespace MediaBrowser.Model.Configuration | |||||||
|         [ProtoMember(3)] |         [ProtoMember(3)] | ||||||
|         public bool EnableAutoUpdate { get; set; } |         public bool EnableAutoUpdate { get; set; } | ||||||
| 
 | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// Gets of sets a value indicating the level of system updates (Release, Beta, Dev) | ||||||
|  |         /// </summary> | ||||||
|  |         [ProtoMember(60)] | ||||||
|  |         public PackageVersionClass SystemUpdateLevel { get; set; } | ||||||
|  | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// The number of days we should retain log files |         /// The number of days we should retain log files | ||||||
|         /// </summary> |         /// </summary> | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| using MediaBrowser.Model.Weather; | using MediaBrowser.Model.Updates; | ||||||
|  | using MediaBrowser.Model.Weather; | ||||||
| using ProtoBuf; | using ProtoBuf; | ||||||
| using System; | using System; | ||||||
| 
 | 
 | ||||||
| @ -299,7 +300,7 @@ namespace MediaBrowser.Model.Configuration | |||||||
|         [ProtoMember(57)] |         [ProtoMember(57)] | ||||||
|         public bool EnableDeveloperTools { get; set; } |         public bool EnableDeveloperTools { get; set; } | ||||||
| 
 | 
 | ||||||
|         // Next Proto number ====> 59 |         // Next Proto number ====> 61 | ||||||
| 
 | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// Initializes a new instance of the <see cref="ServerConfiguration" /> class. |         /// Initializes a new instance of the <see cref="ServerConfiguration" /> class. | ||||||
|  | |||||||
| @ -7,10 +7,14 @@ | |||||||
|         <Label x:Name="lblHeading" Content="Uninstall " HorizontalAlignment="Left" Margin="51,169,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.478,-2.753" Height="29" Width="423" FontSize="14" FontWeight="Bold"/> |         <Label x:Name="lblHeading" Content="Uninstall " HorizontalAlignment="Left" Margin="51,169,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.478,-2.753" Height="29" Width="423" FontSize="14" FontWeight="Bold"/> | ||||||
|         <Button x:Name="btnUninstall" Content="Uninstall" HorizontalAlignment="Left" Margin="505,341,0,0" VerticalAlignment="Top" Width="75" IsDefault="True" RenderTransformOrigin="0.991,-1.041" Click="btnUninstall_Click"/> |         <Button x:Name="btnUninstall" Content="Uninstall" HorizontalAlignment="Left" Margin="505,341,0,0" VerticalAlignment="Top" Width="75" IsDefault="True" RenderTransformOrigin="0.991,-1.041" Click="btnUninstall_Click"/> | ||||||
|         <Button x:Name="btnCancel" Content="Cancel" HorizontalAlignment="Left" Margin="412,341,0,0" VerticalAlignment="Top" Width="75" IsCancel="True" Click="btnCancel_Click"/> |         <Button x:Name="btnCancel" Content="Cancel" HorizontalAlignment="Left" Margin="412,341,0,0" VerticalAlignment="Top" Width="75" IsCancel="True" Click="btnCancel_Click"/> | ||||||
|         <CheckBox x:Name="cbxRemoveAll" Content="Remove All Traces" HorizontalAlignment="Left" Margin="137,234,0,0" VerticalAlignment="Top" Checked="cbxRemoveAll_Checked" Unchecked="cbxRemoveAll_Checked"/> |         <Grid x:Name="grdOptions" HorizontalAlignment="Left" Height="108" Margin="134,213,0,0" VerticalAlignment="Top" Width="261"> | ||||||
|         <CheckBox x:Name="cbxRemoveCache" Content="Delete Cache Files" HorizontalAlignment="Left" Margin="152,255,0,0" VerticalAlignment="Top"/> |             <CheckBox x:Name="cbxRemoveAll" Content="Remove All Traces" HorizontalAlignment="Left" Margin="0,3,0,0" VerticalAlignment="Top" Checked="cbxRemoveAll_Checked" Unchecked="cbxRemoveAll_Checked"/> | ||||||
|         <CheckBox x:Name="cbxRemoveConfig" Content="Delete Configuration and Log Files" HorizontalAlignment="Left" Margin="152,276,0,0" VerticalAlignment="Top"/> |             <CheckBox x:Name="cbxRemoveCache" Content="Delete Cache Files" HorizontalAlignment="Left" Margin="16,25,0,0" VerticalAlignment="Top"/> | ||||||
|         <CheckBox x:Name="cbxRemovePlugins" Content="Delete Plug-ins" HorizontalAlignment="Left" Margin="152,297,0,0" VerticalAlignment="Top"/> |             <CheckBox x:Name="cbxRemoveConfig" Content="Delete Configuration and Log Files" HorizontalAlignment="Left" Margin="16,47,0,0" VerticalAlignment="Top"/> | ||||||
|  |             <CheckBox x:Name="cbxRemovePlugins" Content="Delete Plug-ins" HorizontalAlignment="Left" Margin="16,68,0,0" VerticalAlignment="Top"/> | ||||||
|  |              | ||||||
|  |         </Grid> | ||||||
|  |         <Button x:Name="btnFinished" Content="Finish" HorizontalAlignment="Left" Margin="505,341,0,0" VerticalAlignment="Top" Width="75" IsDefault="True" RenderTransformOrigin="0.991,-1.041" Click="BtnFinished_OnClick"  Visibility="Hidden"/> | ||||||
| 
 | 
 | ||||||
|     </Grid> |     </Grid> | ||||||
| </Window> | </Window> | ||||||
|  | |||||||
| @ -13,6 +13,7 @@ namespace MediaBrowser.Uninstaller.Execute | |||||||
|     public partial class MainWindow : Window |     public partial class MainWindow : Window | ||||||
|     { |     { | ||||||
|         protected string Product = "Server"; |         protected string Product = "Server"; | ||||||
|  |         protected string RootSuffix = "-Server"; | ||||||
| 
 | 
 | ||||||
|         public MainWindow() |         public MainWindow() | ||||||
|         { |         { | ||||||
| @ -27,10 +28,12 @@ namespace MediaBrowser.Uninstaller.Execute | |||||||
|             { |             { | ||||||
|                 case "server": |                 case "server": | ||||||
|                     Product = "Server"; |                     Product = "Server"; | ||||||
|  |                     RootSuffix = "-Server"; | ||||||
|                     break; |                     break; | ||||||
| 
 | 
 | ||||||
|                 case "mbt": |                 case "mbt": | ||||||
|                     Product = "Theater"; |                     Product = "Theater"; | ||||||
|  |                     RootSuffix = "-UI"; | ||||||
|                     break; |                     break; | ||||||
| 
 | 
 | ||||||
|                 default: |                 default: | ||||||
| @ -62,21 +65,113 @@ namespace MediaBrowser.Uninstaller.Execute | |||||||
|         private void btnUninstall_Click(object sender, RoutedEventArgs e) |         private void btnUninstall_Click(object sender, RoutedEventArgs e) | ||||||
|         { |         { | ||||||
|             // First remove our shortcuts |             // First remove our shortcuts | ||||||
|             var startMenu = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu), "Media Browser"); |             lblHeading.Content = "Removing Shortcuts..."; | ||||||
|  |             btnCancel.IsEnabled = btnUninstall.IsEnabled = false; | ||||||
|  |             grdOptions.Visibility = Visibility.Hidden; | ||||||
|  | 
 | ||||||
|  |             var startMenu = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu), "Media Browser 3"); | ||||||
|             var linkName = "Media Browser " + Product + ".lnk"; |             var linkName = "Media Browser " + Product + ".lnk"; | ||||||
|             try  |             RemoveShortcut(Path.Combine(startMenu, linkName)); | ||||||
|             { |             RemoveShortcut(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup),linkName)); | ||||||
|                 File.Delete(Path.Combine(startMenu,linkName)); |  | ||||||
|             } |  | ||||||
|             catch {} // oh well |  | ||||||
| 
 |  | ||||||
|             linkName = "Uninstall " + linkName; |             linkName = "Uninstall " + linkName; | ||||||
|  |             RemoveShortcut(Path.Combine(startMenu, linkName)); | ||||||
|  |             if (Product == "Server") | ||||||
|  |             { | ||||||
|  |                 RemoveShortcut(Path.Combine(startMenu, "MB Dashboard.lnk")); | ||||||
|  |             } | ||||||
|  |             // if the startmenu item is empty now - delete it too | ||||||
|  |             if (Directory.GetFiles(startMenu).Length == 0) | ||||||
|  |             { | ||||||
|  |                 try | ||||||
|  |                 { | ||||||
|  |                     Directory.Delete(startMenu); | ||||||
|  |                 } | ||||||
|  |                 catch (DirectoryNotFoundException) | ||||||
|  |                 { | ||||||
|  |                 } | ||||||
|  |                 catch (Exception ex) | ||||||
|  |                 { | ||||||
|  |                     { | ||||||
|  |                         MessageBox.Show(string.Format("Error attempting to remove shortcut folder {0}\n\n {1}", startMenu, ex.Message), "Error"); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             var rootPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "MediaBrowser" + RootSuffix); | ||||||
|  | 
 | ||||||
|  |             if (cbxRemoveAll.IsChecked == true) | ||||||
|  |             { | ||||||
|  |                 // Just remove our whole directory | ||||||
|  |                 RemovePath(rootPath); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 // First remove the system | ||||||
|  |                 lblHeading.Content = "Removing System Files..."; | ||||||
|  |                 RemovePath(Path.Combine(rootPath, "System")); | ||||||
|  |                 RemovePath(Path.Combine(rootPath, "MediaTools")); | ||||||
|  | 
 | ||||||
|  |                 // And then the others specified | ||||||
|  |                 if (cbxRemoveCache.IsChecked == true) | ||||||
|  |                 { | ||||||
|  |                     lblHeading.Content = "Removing Cache and Data Files..."; | ||||||
|  |                     RemovePath(Path.Combine(rootPath, "cache")); | ||||||
|  |                     RemovePath(Path.Combine(rootPath, "data")); | ||||||
|  |                 } | ||||||
|  |                 if (cbxRemoveConfig.IsChecked == true) | ||||||
|  |                 { | ||||||
|  |                     lblHeading.Content = "Removing Config Files..."; | ||||||
|  |                     RemovePath(Path.Combine(rootPath, "config")); | ||||||
|  |                     RemovePath(Path.Combine(rootPath, "logs")); | ||||||
|  |                 } | ||||||
|  |                 if (cbxRemovePlugins.IsChecked == true) | ||||||
|  |                 { | ||||||
|  |                     lblHeading.Content = "Removing Plugin Files..."; | ||||||
|  |                     RemovePath(Path.Combine(rootPath, "plugins")); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             // and done | ||||||
|  |             lblHeading.Content = string.Format("Media Browser {0} Uninstalled.", Product); | ||||||
|  |             btnUninstall.Visibility = Visibility.Hidden; | ||||||
|  |             btnFinished.Visibility = Visibility.Visible; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private static void RemoveShortcut(string path) | ||||||
|  |         { | ||||||
|             try |             try | ||||||
|             { |             { | ||||||
|                 File.Delete(Path.Combine(startMenu,linkName)); |                 File.Delete(path); | ||||||
|  |             } | ||||||
|  |             catch (FileNotFoundException) | ||||||
|  |             { | ||||||
|  |             } // we're trying to get rid of it anyway | ||||||
|  |             catch (Exception ex) | ||||||
|  |             { | ||||||
|  |                 MessageBox.Show(string.Format("Error attempting to remove shortcut {0}\n\n {1}", path, ex.Message), "Error"); | ||||||
|             } |             } | ||||||
|             catch {} // oh well |  | ||||||
| 
 | 
 | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         private static void RemovePath(string path) | ||||||
|  |         { | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                 Directory.Delete(path, true); | ||||||
|  |             } | ||||||
|  |             catch (DirectoryNotFoundException) | ||||||
|  |             { | ||||||
|  |             } | ||||||
|  |             catch (Exception ex) | ||||||
|  |             { | ||||||
|  |                 MessageBox.Show(string.Format("Error attempting to remove progam folder {0}\n\n {1}", path, ex.Message), "Error"); | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void BtnFinished_OnClick(object sender, RoutedEventArgs e) | ||||||
|  |         { | ||||||
|  |             Close(); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,8 +0,0 @@ | |||||||
| <Application x:Class="MediaBrowser.Uninstaller.App" |  | ||||||
|              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |  | ||||||
|              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |  | ||||||
|              StartupUri="MainWindow.xaml"> |  | ||||||
|     <Application.Resources> |  | ||||||
|           |  | ||||||
|     </Application.Resources> |  | ||||||
| </Application> |  | ||||||
| @ -1,17 +0,0 @@ | |||||||
| using System; |  | ||||||
| using System.Collections.Generic; |  | ||||||
| using System.Configuration; |  | ||||||
| using System.Data; |  | ||||||
| using System.Linq; |  | ||||||
| using System.Threading.Tasks; |  | ||||||
| using System.Windows; |  | ||||||
| 
 |  | ||||||
| namespace MediaBrowser.Uninstaller |  | ||||||
| { |  | ||||||
|     /// <summary> |  | ||||||
|     /// Interaction logic for App.xaml |  | ||||||
|     /// </summary> |  | ||||||
|     public partial class App : Application |  | ||||||
|     { |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,8 +0,0 @@ | |||||||
| <Window x:Class="MediaBrowser.Uninstaller.MainWindow" |  | ||||||
|         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |  | ||||||
|         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |  | ||||||
|         Title="MainWindow" Height="350" Width="525"> |  | ||||||
|     <Grid> |  | ||||||
|          |  | ||||||
|     </Grid> |  | ||||||
| </Window> |  | ||||||
| @ -1,54 +0,0 @@ | |||||||
| using System; |  | ||||||
| using System.Collections.Generic; |  | ||||||
| using System.Diagnostics; |  | ||||||
| using System.IO; |  | ||||||
| using System.Linq; |  | ||||||
| using System.Reflection; |  | ||||||
| using System.Text; |  | ||||||
| using System.Threading; |  | ||||||
| using System.Threading.Tasks; |  | ||||||
| using System.Windows; |  | ||||||
| using System.Windows.Controls; |  | ||||||
| using System.Windows.Data; |  | ||||||
| using System.Windows.Documents; |  | ||||||
| using System.Windows.Input; |  | ||||||
| using System.Windows.Media; |  | ||||||
| using System.Windows.Media.Imaging; |  | ||||||
| using System.Windows.Navigation; |  | ||||||
| using System.Windows.Shapes; |  | ||||||
| using Path = System.IO.Path; |  | ||||||
| 
 |  | ||||||
| namespace MediaBrowser.Uninstaller |  | ||||||
| { |  | ||||||
|     /// <summary> |  | ||||||
|     /// Interaction logic for MainWindow.xaml |  | ||||||
|     /// </summary> |  | ||||||
|     public partial class MainWindow : Window |  | ||||||
|     { |  | ||||||
|         public MainWindow() |  | ||||||
|         { |  | ||||||
|             //All our work is behind the scenes |  | ||||||
|             var args = Environment.GetCommandLineArgs(); |  | ||||||
|             var product = args.Length > 1 ? args[1] : "server"; |  | ||||||
|             //copy the real program to a temp location so we can delete everything here (including us) |  | ||||||
|             var tempExe = Path.Combine(Path.GetTempPath(), "MediaBrowser.Uninstaller.Execute.exe"); |  | ||||||
|             var tempConfig = Path.Combine(Path.GetTempPath(), "MediaBrowser.Uninstaller.Execute.exe.config"); |  | ||||||
|             using (var file = File.Create(tempExe, 4096, FileOptions.DeleteOnClose)) |  | ||||||
|             { |  | ||||||
|                 //copy the real uninstaller to temp location |  | ||||||
|                 var sourceDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) ?? ""; |  | ||||||
|                 File.WriteAllBytes(tempExe, File.ReadAllBytes(Path.Combine(sourceDir ,"MediaBrowser.Uninstaller.Execute.exe"))); |  | ||||||
|                 File.Copy(tempConfig, Path.Combine(sourceDir ,"MediaBrowser.Uninstaller.Execute.exe.config")); |  | ||||||
|                 //kick off the copy |  | ||||||
|                 MessageBox.Show("About to start " + tempExe); |  | ||||||
|                 Process.Start(tempExe, product); |  | ||||||
|                 //wait for it to start up |  | ||||||
|                 Thread.Sleep(500); |  | ||||||
|                 //and shut down |  | ||||||
|                 Close(); |  | ||||||
|             } |  | ||||||
|              |  | ||||||
|             //InitializeComponent(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -4,15 +4,13 @@ | |||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||||||
|     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||||||
|     <ProjectGuid>{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}</ProjectGuid> |     <ProjectGuid>{8B930005-D5B2-4A78-9377-46AC6EDAB688}</ProjectGuid> | ||||||
|     <OutputType>WinExe</OutputType> |     <OutputType>WinExe</OutputType> | ||||||
|     <AppDesignerFolder>Properties</AppDesignerFolder> |     <AppDesignerFolder>Properties</AppDesignerFolder> | ||||||
|     <RootNamespace>MediaBrowser.Uninstaller</RootNamespace> |     <RootNamespace>MediaBrowser.Uninstaller</RootNamespace> | ||||||
|     <AssemblyName>MediaBrowser.Uninstaller</AssemblyName> |     <AssemblyName>MediaBrowser.Uninstaller</AssemblyName> | ||||||
|     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> |     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> | ||||||
|     <FileAlignment>512</FileAlignment> |     <FileAlignment>512</FileAlignment> | ||||||
|     <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> |  | ||||||
|     <WarningLevel>4</WarningLevel> |  | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||||||
|     <PlatformTarget>AnyCPU</PlatformTarget> |     <PlatformTarget>AnyCPU</PlatformTarget> | ||||||
| @ -33,62 +31,21 @@ | |||||||
|     <ErrorReport>prompt</ErrorReport> |     <ErrorReport>prompt</ErrorReport> | ||||||
|     <WarningLevel>4</WarningLevel> |     <WarningLevel>4</WarningLevel> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|  |   <PropertyGroup> | ||||||
|  |     <StartupObject /> | ||||||
|  |   </PropertyGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <Reference Include="System" /> |     <Reference Include="System" /> | ||||||
|     <Reference Include="System.Data" /> |  | ||||||
|     <Reference Include="System.Xml" /> |  | ||||||
|     <Reference Include="Microsoft.CSharp" /> |  | ||||||
|     <Reference Include="System.Core" /> |     <Reference Include="System.Core" /> | ||||||
|     <Reference Include="System.Xml.Linq" /> |     <Reference Include="System.Xml.Linq" /> | ||||||
|     <Reference Include="System.Data.DataSetExtensions" /> |     <Reference Include="System.Data.DataSetExtensions" /> | ||||||
|     <Reference Include="System.Xaml"> |     <Reference Include="Microsoft.CSharp" /> | ||||||
|       <RequiredTargetFramework>4.0</RequiredTargetFramework> |     <Reference Include="System.Data" /> | ||||||
|     </Reference> |     <Reference Include="System.Xml" /> | ||||||
|     <Reference Include="WindowsBase" /> |  | ||||||
|     <Reference Include="PresentationCore" /> |  | ||||||
|     <Reference Include="PresentationFramework" /> |  | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <ApplicationDefinition Include="App.xaml"> |     <Compile Include="Program.cs" /> | ||||||
|       <Generator>MSBuild:Compile</Generator> |     <Compile Include="Properties\AssemblyInfo.cs" /> | ||||||
|       <SubType>Designer</SubType> |  | ||||||
|     </ApplicationDefinition> |  | ||||||
|     <Page Include="MainWindow.xaml"> |  | ||||||
|       <Generator>MSBuild:Compile</Generator> |  | ||||||
|       <SubType>Designer</SubType> |  | ||||||
|     </Page> |  | ||||||
|     <Compile Include="App.xaml.cs"> |  | ||||||
|       <DependentUpon>App.xaml</DependentUpon> |  | ||||||
|       <SubType>Code</SubType> |  | ||||||
|     </Compile> |  | ||||||
|     <Compile Include="MainWindow.xaml.cs"> |  | ||||||
|       <DependentUpon>MainWindow.xaml</DependentUpon> |  | ||||||
|       <SubType>Code</SubType> |  | ||||||
|     </Compile> |  | ||||||
|   </ItemGroup> |  | ||||||
|   <ItemGroup> |  | ||||||
|     <Compile Include="Properties\AssemblyInfo.cs"> |  | ||||||
|       <SubType>Code</SubType> |  | ||||||
|     </Compile> |  | ||||||
|     <Compile Include="Properties\Resources.Designer.cs"> |  | ||||||
|       <AutoGen>True</AutoGen> |  | ||||||
|       <DesignTime>True</DesignTime> |  | ||||||
|       <DependentUpon>Resources.resx</DependentUpon> |  | ||||||
|     </Compile> |  | ||||||
|     <Compile Include="Properties\Settings.Designer.cs"> |  | ||||||
|       <AutoGen>True</AutoGen> |  | ||||||
|       <DependentUpon>Settings.settings</DependentUpon> |  | ||||||
|       <DesignTimeSharedInput>True</DesignTimeSharedInput> |  | ||||||
|     </Compile> |  | ||||||
|     <EmbeddedResource Include="Properties\Resources.resx"> |  | ||||||
|       <Generator>ResXFileCodeGenerator</Generator> |  | ||||||
|       <LastGenOutput>Resources.Designer.cs</LastGenOutput> |  | ||||||
|     </EmbeddedResource> |  | ||||||
|     <None Include="Properties\Settings.settings"> |  | ||||||
|       <Generator>SettingsSingleFileGenerator</Generator> |  | ||||||
|       <LastGenOutput>Settings.Designer.cs</LastGenOutput> |  | ||||||
|     </None> |  | ||||||
|     <AppDesigner Include="Properties\" /> |  | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <None Include="App.config" /> |     <None Include="App.config" /> | ||||||
|  | |||||||
							
								
								
									
										33
									
								
								MediaBrowser.Uninstaller/Program.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								MediaBrowser.Uninstaller/Program.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | |||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Diagnostics; | ||||||
|  | using System.IO; | ||||||
|  | using System.Linq; | ||||||
|  | using System.Reflection; | ||||||
|  | using System.Text; | ||||||
|  | using System.Threading; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  | 
 | ||||||
|  | namespace MediaBrowser.Uninstaller | ||||||
|  | { | ||||||
|  |     class Program | ||||||
|  |     { | ||||||
|  |         static void Main(string[] args) | ||||||
|  |         { | ||||||
|  |             var product = args.Length > 1 ? args[1] : "server"; | ||||||
|  |             //copy the real program to a temp location so we can delete everything here (including us) | ||||||
|  |             var tempExe = Path.Combine(Path.GetTempPath(), "MediaBrowser.Uninstaller.Execute.exe"); | ||||||
|  |             var tempConfig = Path.Combine(Path.GetTempPath(), "MediaBrowser.Uninstaller.Execute.exe.config"); | ||||||
|  |             //using (var file = File.Create(tempExe, 4096, FileOptions.DeleteOnClose)) | ||||||
|  |             { | ||||||
|  |                 //copy the real uninstaller to temp location | ||||||
|  |                 var sourceDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? ""; | ||||||
|  |                 File.WriteAllBytes(tempExe, File.ReadAllBytes(Path.Combine(sourceDir, "MediaBrowser.Uninstaller.Execute.exe"))); | ||||||
|  |                 File.Copy(Path.Combine(sourceDir, "MediaBrowser.Uninstaller.Execute.exe.config"), tempConfig, true); | ||||||
|  |                 //kick off the copy | ||||||
|  |                 Process.Start(tempExe, product); | ||||||
|  |                 //and shut down | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -1,8 +1,6 @@ | |||||||
| using System.Reflection; | using System.Reflection; | ||||||
| using System.Resources; |  | ||||||
| using System.Runtime.CompilerServices; | using System.Runtime.CompilerServices; | ||||||
| using System.Runtime.InteropServices; | using System.Runtime.InteropServices; | ||||||
| using System.Windows; |  | ||||||
| 
 | 
 | ||||||
| // General Information about an assembly is controlled through the following  | // General Information about an assembly is controlled through the following  | ||||||
| // set of attributes. Change these attribute values to modify the information | // set of attributes. Change these attribute values to modify the information | ||||||
| @ -21,25 +19,8 @@ using System.Windows; | |||||||
| // COM, set the ComVisible attribute to true on that type. | // COM, set the ComVisible attribute to true on that type. | ||||||
| [assembly: ComVisible(false)] | [assembly: ComVisible(false)] | ||||||
| 
 | 
 | ||||||
| //In order to begin building localizable applications, set  | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||||||
| //<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file | [assembly: Guid("8730b84d-cebf-4e2a-9a17-4be58bd5c2dc")] | ||||||
| //inside a <PropertyGroup>.  For example, if you are using US english |  | ||||||
| //in your source files, set the <UICulture> to en-US.  Then uncomment |  | ||||||
| //the NeutralResourceLanguage attribute below.  Update the "en-US" in |  | ||||||
| //the line below to match the UICulture setting in the project file. |  | ||||||
| 
 |  | ||||||
| //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| [assembly: ThemeInfo( |  | ||||||
|     ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located |  | ||||||
|     //(used if a resource is not found in the page,  |  | ||||||
|     // or application resource dictionaries) |  | ||||||
|     ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located |  | ||||||
|     //(used if a resource is not found in the page,  |  | ||||||
|     // app, or any theme specific resource dictionaries) |  | ||||||
| )] |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| // Version information for an assembly consists of the following four values: | // Version information for an assembly consists of the following four values: | ||||||
| // | // | ||||||
|  | |||||||
| @ -1,71 +0,0 @@ | |||||||
| //------------------------------------------------------------------------------ |  | ||||||
| // <auto-generated> |  | ||||||
| //     This code was generated by a tool. |  | ||||||
| //     Runtime Version:4.0.30319.17929 |  | ||||||
| // |  | ||||||
| //     Changes to this file may cause incorrect behavior and will be lost if |  | ||||||
| //     the code is regenerated. |  | ||||||
| // </auto-generated> |  | ||||||
| //------------------------------------------------------------------------------ |  | ||||||
| 
 |  | ||||||
| namespace MediaBrowser.Uninstaller.Properties |  | ||||||
| { |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     /// <summary> |  | ||||||
|     ///   A strongly-typed resource class, for looking up localized strings, etc. |  | ||||||
|     /// </summary> |  | ||||||
|     // This class was auto-generated by the StronglyTypedResourceBuilder |  | ||||||
|     // class via a tool like ResGen or Visual Studio. |  | ||||||
|     // To add or remove a member, edit your .ResX file then rerun ResGen |  | ||||||
|     // with the /str option, or rebuild your VS project. |  | ||||||
|     [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] |  | ||||||
|     [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] |  | ||||||
|     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] |  | ||||||
|     internal class Resources |  | ||||||
|     { |  | ||||||
| 
 |  | ||||||
|         private static global::System.Resources.ResourceManager resourceMan; |  | ||||||
| 
 |  | ||||||
|         private static global::System.Globalization.CultureInfo resourceCulture; |  | ||||||
| 
 |  | ||||||
|         [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] |  | ||||||
|         internal Resources() |  | ||||||
|         { |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         /// <summary> |  | ||||||
|         ///   Returns the cached ResourceManager instance used by this class. |  | ||||||
|         /// </summary> |  | ||||||
|         [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] |  | ||||||
|         internal static global::System.Resources.ResourceManager ResourceManager |  | ||||||
|         { |  | ||||||
|             get |  | ||||||
|             { |  | ||||||
|                 if ((resourceMan == null)) |  | ||||||
|                 { |  | ||||||
|                     global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MediaBrowser.Uninstaller.Properties.Resources", typeof(Resources).Assembly); |  | ||||||
|                     resourceMan = temp; |  | ||||||
|                 } |  | ||||||
|                 return resourceMan; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         /// <summary> |  | ||||||
|         ///   Overrides the current thread's CurrentUICulture property for all |  | ||||||
|         ///   resource lookups using this strongly typed resource class. |  | ||||||
|         /// </summary> |  | ||||||
|         [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] |  | ||||||
|         internal static global::System.Globalization.CultureInfo Culture |  | ||||||
|         { |  | ||||||
|             get |  | ||||||
|             { |  | ||||||
|                 return resourceCulture; |  | ||||||
|             } |  | ||||||
|             set |  | ||||||
|             { |  | ||||||
|                 resourceCulture = value; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,117 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <root> |  | ||||||
|   <!--  |  | ||||||
|     Microsoft ResX Schema  |  | ||||||
|      |  | ||||||
|     Version 2.0 |  | ||||||
|      |  | ||||||
|     The primary goals of this format is to allow a simple XML format  |  | ||||||
|     that is mostly human readable. The generation and parsing of the  |  | ||||||
|     various data types are done through the TypeConverter classes  |  | ||||||
|     associated with the data types. |  | ||||||
|      |  | ||||||
|     Example: |  | ||||||
|      |  | ||||||
|     ... ado.net/XML headers & schema ... |  | ||||||
|     <resheader name="resmimetype">text/microsoft-resx</resheader> |  | ||||||
|     <resheader name="version">2.0</resheader> |  | ||||||
|     <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> |  | ||||||
|     <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> |  | ||||||
|     <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> |  | ||||||
|     <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> |  | ||||||
|     <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> |  | ||||||
|         <value>[base64 mime encoded serialized .NET Framework object]</value> |  | ||||||
|     </data> |  | ||||||
|     <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> |  | ||||||
|         <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> |  | ||||||
|         <comment>This is a comment</comment> |  | ||||||
|     </data> |  | ||||||
|                  |  | ||||||
|     There are any number of "resheader" rows that contain simple  |  | ||||||
|     name/value pairs. |  | ||||||
|      |  | ||||||
|     Each data row contains a name, and value. The row also contains a  |  | ||||||
|     type or mimetype. Type corresponds to a .NET class that support  |  | ||||||
|     text/value conversion through the TypeConverter architecture.  |  | ||||||
|     Classes that don't support this are serialized and stored with the  |  | ||||||
|     mimetype set. |  | ||||||
|      |  | ||||||
|     The mimetype is used for serialized objects, and tells the  |  | ||||||
|     ResXResourceReader how to depersist the object. This is currently not  |  | ||||||
|     extensible. For a given mimetype the value must be set accordingly: |  | ||||||
|      |  | ||||||
|     Note - application/x-microsoft.net.object.binary.base64 is the format  |  | ||||||
|     that the ResXResourceWriter will generate, however the reader can  |  | ||||||
|     read any of the formats listed below. |  | ||||||
|      |  | ||||||
|     mimetype: application/x-microsoft.net.object.binary.base64 |  | ||||||
|     value   : The object must be serialized with  |  | ||||||
|             : System.Serialization.Formatters.Binary.BinaryFormatter |  | ||||||
|             : and then encoded with base64 encoding. |  | ||||||
|      |  | ||||||
|     mimetype: application/x-microsoft.net.object.soap.base64 |  | ||||||
|     value   : The object must be serialized with  |  | ||||||
|             : System.Runtime.Serialization.Formatters.Soap.SoapFormatter |  | ||||||
|             : and then encoded with base64 encoding. |  | ||||||
| 
 |  | ||||||
|     mimetype: application/x-microsoft.net.object.bytearray.base64 |  | ||||||
|     value   : The object must be serialized into a byte array  |  | ||||||
|             : using a System.ComponentModel.TypeConverter |  | ||||||
|             : and then encoded with base64 encoding. |  | ||||||
|     --> |  | ||||||
|   <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> |  | ||||||
|     <xsd:element name="root" msdata:IsDataSet="true"> |  | ||||||
|       <xsd:complexType> |  | ||||||
|         <xsd:choice maxOccurs="unbounded"> |  | ||||||
|           <xsd:element name="metadata"> |  | ||||||
|             <xsd:complexType> |  | ||||||
|               <xsd:sequence> |  | ||||||
|                 <xsd:element name="value" type="xsd:string" minOccurs="0" /> |  | ||||||
|               </xsd:sequence> |  | ||||||
|               <xsd:attribute name="name" type="xsd:string" /> |  | ||||||
|               <xsd:attribute name="type" type="xsd:string" /> |  | ||||||
|               <xsd:attribute name="mimetype" type="xsd:string" /> |  | ||||||
|             </xsd:complexType> |  | ||||||
|           </xsd:element> |  | ||||||
|           <xsd:element name="assembly"> |  | ||||||
|             <xsd:complexType> |  | ||||||
|               <xsd:attribute name="alias" type="xsd:string" /> |  | ||||||
|               <xsd:attribute name="name" type="xsd:string" /> |  | ||||||
|             </xsd:complexType> |  | ||||||
|           </xsd:element> |  | ||||||
|           <xsd:element name="data"> |  | ||||||
|             <xsd:complexType> |  | ||||||
|               <xsd:sequence> |  | ||||||
|                 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |  | ||||||
|                 <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> |  | ||||||
|               </xsd:sequence> |  | ||||||
|               <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> |  | ||||||
|               <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> |  | ||||||
|               <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> |  | ||||||
|             </xsd:complexType> |  | ||||||
|           </xsd:element> |  | ||||||
|           <xsd:element name="resheader"> |  | ||||||
|             <xsd:complexType> |  | ||||||
|               <xsd:sequence> |  | ||||||
|                 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |  | ||||||
|               </xsd:sequence> |  | ||||||
|               <xsd:attribute name="name" type="xsd:string" use="required" /> |  | ||||||
|             </xsd:complexType> |  | ||||||
|           </xsd:element> |  | ||||||
|         </xsd:choice> |  | ||||||
|       </xsd:complexType> |  | ||||||
|     </xsd:element> |  | ||||||
|   </xsd:schema> |  | ||||||
|   <resheader name="resmimetype"> |  | ||||||
|     <value>text/microsoft-resx</value> |  | ||||||
|   </resheader> |  | ||||||
|   <resheader name="version"> |  | ||||||
|     <value>2.0</value> |  | ||||||
|   </resheader> |  | ||||||
|   <resheader name="reader"> |  | ||||||
|     <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |  | ||||||
|   </resheader> |  | ||||||
|   <resheader name="writer"> |  | ||||||
|     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |  | ||||||
|   </resheader> |  | ||||||
| </root> |  | ||||||
| @ -1,30 +0,0 @@ | |||||||
| //------------------------------------------------------------------------------ |  | ||||||
| // <auto-generated> |  | ||||||
| //     This code was generated by a tool. |  | ||||||
| //     Runtime Version:4.0.30319.17929 |  | ||||||
| // |  | ||||||
| //     Changes to this file may cause incorrect behavior and will be lost if |  | ||||||
| //     the code is regenerated. |  | ||||||
| // </auto-generated> |  | ||||||
| //------------------------------------------------------------------------------ |  | ||||||
| 
 |  | ||||||
| namespace MediaBrowser.Uninstaller.Properties |  | ||||||
| { |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] |  | ||||||
|     [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] |  | ||||||
|     internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase |  | ||||||
|     { |  | ||||||
| 
 |  | ||||||
|         private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); |  | ||||||
| 
 |  | ||||||
|         public static Settings Default |  | ||||||
|         { |  | ||||||
|             get |  | ||||||
|             { |  | ||||||
|                 return defaultInstance; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,7 +0,0 @@ | |||||||
| <?xml version='1.0' encoding='utf-8'?> |  | ||||||
| <SettingsFile xmlns="uri:settings" CurrentProfile="(Default)"> |  | ||||||
|   <Profiles> |  | ||||||
|     <Profile Name="(Default)" /> |  | ||||||
|   </Profiles> |  | ||||||
|   <Settings /> |  | ||||||
| </SettingsFile> |  | ||||||
| @ -51,7 +51,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Server.Impleme | |||||||
| EndProject | EndProject | ||||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Uninstaller.Execute", "MediaBrowser.Uninstaller.Execute\MediaBrowser.Uninstaller.Execute.csproj", "{FACAF749-3E28-46DD-B613-654FCD434959}" | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Uninstaller.Execute", "MediaBrowser.Uninstaller.Execute\MediaBrowser.Uninstaller.Execute.csproj", "{FACAF749-3E28-46DD-B613-654FCD434959}" | ||||||
| EndProject | EndProject | ||||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Uninstaller", "MediaBrowser.Uninstaller\MediaBrowser.Uninstaller.csproj", "{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}" | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Uninstaller", "MediaBrowser.Uninstaller\MediaBrowser.Uninstaller.csproj", "{8B930005-D5B2-4A78-9377-46AC6EDAB688}" | ||||||
| EndProject | EndProject | ||||||
| Global | Global | ||||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||||
| @ -335,20 +335,20 @@ Global | |||||||
| 		{FACAF749-3E28-46DD-B613-654FCD434959}.Release|Win32.ActiveCfg = Release|Any CPU | 		{FACAF749-3E28-46DD-B613-654FCD434959}.Release|Win32.ActiveCfg = Release|Any CPU | ||||||
| 		{FACAF749-3E28-46DD-B613-654FCD434959}.Release|x64.ActiveCfg = Release|Any CPU | 		{FACAF749-3E28-46DD-B613-654FCD434959}.Release|x64.ActiveCfg = Release|Any CPU | ||||||
| 		{FACAF749-3E28-46DD-B613-654FCD434959}.Release|x86.ActiveCfg = Release|Any CPU | 		{FACAF749-3E28-46DD-B613-654FCD434959}.Release|x86.ActiveCfg = Release|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Debug|Any CPU.Build.0 = Debug|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Debug|Win32.ActiveCfg = Debug|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Debug|Win32.ActiveCfg = Debug|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Debug|x64.ActiveCfg = Debug|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Debug|x64.ActiveCfg = Debug|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Debug|x86.ActiveCfg = Debug|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Debug|x86.ActiveCfg = Debug|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Release|Any CPU.ActiveCfg = Release|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Release|Any CPU.Build.0 = Release|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Release|Any CPU.Build.0 = Release|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Release|Mixed Platforms.Build.0 = Release|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Release|Mixed Platforms.Build.0 = Release|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Release|Win32.ActiveCfg = Release|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Release|Win32.ActiveCfg = Release|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Release|x64.ActiveCfg = Release|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Release|x64.ActiveCfg = Release|Any CPU | ||||||
| 		{21EC6FB8-F444-4B60-8BA5-9CA443901A0D}.Release|x86.ActiveCfg = Release|Any CPU | 		{8B930005-D5B2-4A78-9377-46AC6EDAB688}.Release|x86.ActiveCfg = Release|Any CPU | ||||||
| 	EndGlobalSection | 	EndGlobalSection | ||||||
| 	GlobalSection(SolutionProperties) = preSolution | 	GlobalSection(SolutionProperties) = preSolution | ||||||
| 		HideSolutionNode = FALSE | 		HideSolutionNode = FALSE | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user