From: <an...@us...> - 2008-04-10 14:12:27
|
Revision: 1622 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=1622&view=rev Author: and-81 Date: 2008-04-10 07:12:11 -0700 (Thu, 10 Apr 2008) Log Message: ----------- Modified Paths: -------------- trunk/plugins/IR Server Suite/Applications/Dbox Tuner/Dbox Tuner.csproj trunk/plugins/IR Server Suite/Applications/Debug Client/Debug Client.csproj trunk/plugins/IR Server Suite/Applications/Tray Launcher/Tray Launcher.csproj trunk/plugins/IR Server Suite/Common/IrssComms/IrssComms.csproj trunk/plugins/IR Server Suite/Common/IrssUtils/Common.cs trunk/plugins/IR Server Suite/Common/IrssUtils/FocusForcer.cs trunk/plugins/IR Server Suite/Common/IrssUtils/IrssMacro.cs trunk/plugins/IR Server Suite/Common/IrssUtils/IrssUtils.csproj trunk/plugins/IR Server Suite/Common/IrssUtils/Win32.cs trunk/plugins/IR Server Suite/Input Service/Input Service/Input Service.csproj trunk/plugins/IR Server Suite/Input Service/Input Service/InputService.cs trunk/plugins/IR Server Suite/Input Service/Input Service/Program.cs trunk/plugins/IR Server Suite/Input Service/Input Service Configuration/Configuration.csproj trunk/plugins/IR Server Suite/setup/setup-languages.nsh trunk/plugins/IR Server Suite/setup/setup.nsi Added Paths: ----------- trunk/plugins/IR Server Suite/setup/Images/ trunk/plugins/IR Server Suite/setup/Images/header.bmp trunk/plugins/IR Server Suite/setup/Images/wizard-svn.bmp trunk/plugins/IR Server Suite/setup/Images/wizard.bmp Modified: trunk/plugins/IR Server Suite/Applications/Dbox Tuner/Dbox Tuner.csproj =================================================================== --- trunk/plugins/IR Server Suite/Applications/Dbox Tuner/Dbox Tuner.csproj 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/Applications/Dbox Tuner/Dbox Tuner.csproj 2008-04-10 14:12:11 UTC (rev 1622) @@ -66,6 +66,7 @@ <ProjectReference Include="..\..\Common\IrssUtils\IrssUtils.csproj"> <Project>{CA15769C-232E-4CA7-94FD-206A06CA3ABB}</Project> <Name>IrssUtils</Name> + <Private>True</Private> </ProjectReference> </ItemGroup> <ItemGroup> Modified: trunk/plugins/IR Server Suite/Applications/Debug Client/Debug Client.csproj =================================================================== --- trunk/plugins/IR Server Suite/Applications/Debug Client/Debug Client.csproj 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/Applications/Debug Client/Debug Client.csproj 2008-04-10 14:12:11 UTC (rev 1622) @@ -68,10 +68,12 @@ <ProjectReference Include="..\..\Common\IrssComms\IrssComms.csproj"> <Project>{BCAFDF45-70DD-46FD-8B98-880DDA585AD2}</Project> <Name>IrssComms</Name> + <Private>True</Private> </ProjectReference> <ProjectReference Include="..\..\Common\irssUtils\IrssUtils.csproj"> <Project>{CA15769C-232E-4CA7-94FD-206A06CA3ABB}</Project> <Name>IrssUtils</Name> + <Private>True</Private> </ProjectReference> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> Modified: trunk/plugins/IR Server Suite/Applications/Tray Launcher/Tray Launcher.csproj =================================================================== --- trunk/plugins/IR Server Suite/Applications/Tray Launcher/Tray Launcher.csproj 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/Applications/Tray Launcher/Tray Launcher.csproj 2008-04-10 14:12:11 UTC (rev 1622) @@ -96,10 +96,12 @@ <ProjectReference Include="..\..\Common\IrssComms\IrssComms.csproj"> <Project>{BCAFDF45-70DD-46FD-8B98-880DDA585AD2}</Project> <Name>IrssComms</Name> + <Private>True</Private> </ProjectReference> <ProjectReference Include="..\..\Common\irssUtils\IrssUtils.csproj"> <Project>{CA15769C-232E-4CA7-94FD-206A06CA3ABB}</Project> <Name>IrssUtils</Name> + <Private>True</Private> </ProjectReference> </ItemGroup> <ItemGroup> Modified: trunk/plugins/IR Server Suite/Common/IrssComms/IrssComms.csproj =================================================================== --- trunk/plugins/IR Server Suite/Common/IrssComms/IrssComms.csproj 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/Common/IrssComms/IrssComms.csproj 2008-04-10 14:12:11 UTC (rev 1622) @@ -64,7 +64,7 @@ </Target> --> <PropertyGroup> - <PostBuildEvent>CALL "%25VS80COMNTOOLS%25vsvars32.bat" -gacutil.exe /i $(TargetFileName)</PostBuildEvent> + <PostBuildEvent> + </PostBuildEvent> </PropertyGroup> </Project> \ No newline at end of file Modified: trunk/plugins/IR Server Suite/Common/IrssUtils/Common.cs =================================================================== --- trunk/plugins/IR Server Suite/Common/IrssUtils/Common.cs 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/Common/IrssUtils/Common.cs 2008-04-10 14:12:11 UTC (rev 1622) @@ -506,7 +506,8 @@ if (forceFocus && !process.StartInfo.CreateNoWindow && process.StartInfo.WindowStyle != ProcessWindowStyle.Hidden) { FocusForcer forcer = new FocusForcer(process.Id); - forcer.Start(); + //forcer.Start(); + forcer.Force(); } if (waitForExit) @@ -892,11 +893,11 @@ #region Misc + /* /// <summary> /// Get a list of commands found in the Command Libraries. /// </summary> /// <returns>Available commands.</returns> - /* public static Type[] GetLibraryCommands() { try Modified: trunk/plugins/IR Server Suite/Common/IrssUtils/FocusForcer.cs =================================================================== --- trunk/plugins/IR Server Suite/Common/IrssUtils/FocusForcer.cs 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/Common/IrssUtils/FocusForcer.cs 2008-04-10 14:12:11 UTC (rev 1622) @@ -14,9 +14,11 @@ #region Variables int _processId; - Thread _forcerThread; + //Thread _forcerThread; IntPtr _windowHandle; + EventWaitHandle _waitHandle; + #endregion Variables #region Constructor @@ -32,19 +34,72 @@ #endregion Constructor + #region Public Methods - public void Start() + /// <summary> + /// Forces the process into focus (once). + /// </summary> + /// <returns></returns> + public bool Force() { + Process process = Process.GetProcessById(_processId); + if (process == null || process.HasExited) + throw new InvalidOperationException("Cannot force focus, process is not running"); + + //if (_forcerThread != null) + //throw new InvalidOperationException("Cannot force focus, Forcer thread already running"); + + _waitHandle = new AutoResetEvent(false); + + try + { + Win32.EnumWindowsProc ewc = new Win32.EnumWindowsProc(CheckWindow); + + while (!process.HasExited) + { + int focusedId = Win32.GetForegroundWindowPID(); + if (focusedId != _processId) + { + _windowHandle = IntPtr.Zero; + Win32.EnumerateWindows(ewc, IntPtr.Zero); + + bool waitResult = _waitHandle.WaitOne(5000, false); + + if (_windowHandle != IntPtr.Zero) + return Win32.SetForegroundWindow(_windowHandle, true); + } + + Thread.Sleep(5000); + } + } + finally + { + _waitHandle.Close(); + _waitHandle = null; + } + + return false; + } + + /* + /// <summary> + /// Starts the forcer thread. + /// </summary> + public void StartThread() + { if (_forcerThread != null) throw new InvalidOperationException("Focus Forcer is already running"); _forcerThread = new Thread(new ThreadStart(ForcerThread)); - _forcerThread.Name = "Focus Forcer"; + _forcerThread.Name = "Focus Forcer Thread"; _forcerThread.IsBackground = true; _forcerThread.Start(); } - - public void Stop() + + /// <summary> + /// Stops the forcer thread. + /// </summary> + public void StopThread() { if (_forcerThread == null) return; @@ -52,46 +107,86 @@ _forcerThread.Abort(); _forcerThread = null; } + */ + #endregion Public Methods + + #region Implementation + + /* void ForcerThread() { Process process = Process.GetProcessById(_processId); - - if (process == null || process.HasExited) + if (process == null) return; - Win32.EnumWindowsProc ewc = new Win32.EnumWindowsProc(CheckWindow); + _waitHandle = new AutoResetEvent(false); - while (!process.HasExited) + try { - int focused = Win32.GetForegroundWindowPID(); - if (focused != _processId) - Win32.EnumerateWindows(ewc, IntPtr.Zero); + Win32.EnumWindowsProc ewc = new Win32.EnumWindowsProc(CheckWindow); - Thread.Sleep(5000); + while (!process.HasExited) + { + int focusedId = Win32.GetForegroundWindowPID(); + if (focusedId != _processId) + { + _windowHandle = IntPtr.Zero; + Win32.EnumerateWindows(ewc, IntPtr.Zero); + + bool waitResult = _waitHandle.WaitOne(5000, false); + +#if TRACE + Trace.WriteLine(String.Format("ForcerThread: waitResult = {0}", waitResult)); +#endif + + if (_windowHandle != IntPtr.Zero) + { + bool result = Win32.SetForegroundWindow(_windowHandle, true); +#if TRACE + Trace.WriteLine(String.Format("ForcerThread: SetForegroundWindow returned {0}", result)); +#endif + } + } + + Thread.Sleep(5000); + } } + finally + { + _waitHandle.Close(); + _waitHandle = null; + } } + */ bool CheckWindow(IntPtr hWnd, IntPtr lParam) { if (hWnd == IntPtr.Zero) { _windowHandle = IntPtr.Zero; +#if TRACE + Trace.WriteLine("CheckWindow: hWnd == IntPtr.Zero, _waitHandle.Set();"); +#endif + _waitHandle.Set(); return false; } if (Win32.GetWindowPID(hWnd) == _processId) { - bool result = Win32.SetForegroundWindow(hWnd, true); + _windowHandle = hWnd; #if TRACE - Trace.WriteLine(String.Format("SetForegroundWindow: {0}", result)); + Trace.WriteLine("CheckWindow: Win32.GetWindowPID(hWnd) == _processId, _waitHandle.Set();"); #endif + _waitHandle.Set(); return false; } return true; } + #endregion Implementation + } } Modified: trunk/plugins/IR Server Suite/Common/IrssUtils/IrssMacro.cs =================================================================== --- trunk/plugins/IR Server Suite/Common/IrssUtils/IrssMacro.cs 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/Common/IrssUtils/IrssMacro.cs 2008-04-10 14:12:11 UTC (rev 1622) @@ -24,19 +24,52 @@ #region Constants - // String comparisons ... + #region String comparisons + + /// <summary> + /// Equals. + /// </summary> public const string IfEquals = "=="; + /// <summary> + /// Does Not Equal. + /// </summary> public const string IfNotEqual = "!="; + /// <summary> + /// Contains. + /// </summary> public const string IfContains = "CONTAINS"; + /// <summary> + /// Starts With. + /// </summary> public const string IfStartsWith = "STARTS WITH"; + /// <summary> + /// Ends With. + /// </summary> public const string IfEndsWith = "ENDS WITH"; - // Integer comparisons ... + #endregion String comparisons + + #region Integer comparisons + + /// <summary> + /// Greater Than. + /// </summary> public const string IfGreaterThan = ">"; + /// <summary> + /// Less Than. + /// </summary> public const string IfLessThan = "<"; + /// <summary> + /// Greater Than or Equal To. + /// </summary> public const string IfGreaterThanOrEqual = ">="; + /// <summary> + /// Less Than or Equal To. + /// </summary> public const string IfLessThanOrEqual = "<="; + #endregion Integer comparisons + #endregion Constants #region Public Methods @@ -190,7 +223,7 @@ /// <summary> /// Gets the position of label within the macro. /// </summary> - /// <param name="commands">The macro commands.</param> + /// <param name="commandList">The command list.</param> /// <param name="label">The label to find.</param> /// <returns>The label position.</returns> static int GetLabelPosition(string[] commandList, string label) Modified: trunk/plugins/IR Server Suite/Common/IrssUtils/IrssUtils.csproj =================================================================== --- trunk/plugins/IR Server Suite/Common/IrssUtils/IrssUtils.csproj 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/Common/IrssUtils/IrssUtils.csproj 2008-04-10 14:12:11 UTC (rev 1622) @@ -25,9 +25,9 @@ <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> - <DocumentationFile> - </DocumentationFile> + <DocumentationFile>bin\Debug\IrssUtils.XML</DocumentationFile> <UseVSHostingProcess>false</UseVSHostingProcess> + <NoWarn>1591</NoWarn> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugType>none</DebugType> @@ -57,7 +57,8 @@ <Compile Include="Exceptions\CommandStructureException.cs" /> <Compile Include="Exceptions\CommandExecutionException.cs" /> <Compile Include="Exceptions\MacroStructureException.cs" /> - <Compile Include="FocusForcer.cs" /> + <Compile Include="FocusForcer.cs"> + </Compile> <Compile Include="Forms\BlastCommand.cs"> <SubType>Form</SubType> </Compile> @@ -374,7 +375,7 @@ </Target> --> <PropertyGroup> - <PostBuildEvent>CALL "%25VS80COMNTOOLS%25vsvars32.bat" -gacutil.exe /i $(TargetFileName)</PostBuildEvent> + <PostBuildEvent> + </PostBuildEvent> </PropertyGroup> </Project> \ No newline at end of file Modified: trunk/plugins/IR Server Suite/Common/IrssUtils/Win32.cs =================================================================== --- trunk/plugins/IR Server Suite/Common/IrssUtils/Win32.cs 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/Common/IrssUtils/Win32.cs 2008-04-10 14:12:11 UTC (rev 1622) @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; using System.ComponentModel; +#if TRACE +using System.Diagnostics; +#endif using System.Drawing; using System.Runtime.InteropServices; using System.Text; @@ -1846,7 +1849,7 @@ //[return: MarshalAs(UnmanagedType.Bool)] //static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); - [DllImport("user32.dll")] + [DllImport("user32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool AttachThreadInput( int threadId, @@ -1917,10 +1920,15 @@ static extern IntPtr GetParent( IntPtr hWnd); - [DllImport("user32.dll")] - static extern uint GetWindowThreadProcessId( + /* + [DllImport("User32.dll", CharSet = CharSet.Auto)] + static extern bool PeekMessage( + out System.Windows.Forms.Message msg, IntPtr hWnd, - out uint lpdwProcessId); + uint messageFilterMin, + uint messageFilterMax, + uint flags); + */ #endregion Interop @@ -2175,29 +2183,58 @@ /// <returns><c>true</c> if successful, otherwise <c>false</c>.</returns> public static bool SetForegroundWindow(IntPtr hWnd, bool force) { +#if TRACE + Trace.WriteLine(String.Format("SetForegroundWindow({0}, {1})", hWnd, force)); +#endif + IntPtr fgWindow = GetForegroundWindow(); if (hWnd == fgWindow) + { +#if TRACE + Trace.WriteLine("SetForegroundWindow: hWnd == fgWindow"); +#endif return true; + } - bool setResult = SetForegroundWindow(hWnd); - if (!force) - return setResult; + bool setAttempt = SetForegroundWindow(hWnd); +#if TRACE + Trace.WriteLine(String.Format("SetForegroundWindow: setAttempt == {0}", setAttempt)); +#endif + if (!force || setAttempt) + return setAttempt; if (fgWindow == IntPtr.Zero) + { +#if TRACE + Trace.WriteLine("SetForegroundWindow: fgWindow == IntPtr.Zero"); +#endif return false; + } int fgWindowPID = -1; GetWindowThreadProcessId(fgWindow, out fgWindowPID); if (fgWindowPID == -1) + { +#if TRACE + Trace.WriteLine("SetForegroundWindow: fgWindowPID == -1"); +#endif return false; + } + // If we don't attach successfully to the windows thread then we're out of options int curThreadID = GetCurrentThreadId(); - - // If we don't attach successfully to the windows thread then we're out of options - if (!AttachThreadInput(curThreadID, fgWindowPID, true)) + bool attached = AttachThreadInput(curThreadID, fgWindowPID, true); + int lastError = Marshal.GetLastWin32Error(); + + if (!attached) + { +#if TRACE + Trace.WriteLine(String.Format("SetForegroundWindow: !AttachThreadInput, LastError = {0}", lastError)); +#endif return false; + } SetForegroundWindow(hWnd); BringWindowToTop(hWnd); @@ -2206,6 +2243,11 @@ // Detach AttachThreadInput(curThreadID, fgWindowPID, false); +#if TRACE + Trace.WriteLine("SetForegroundWindow: Done"); +#endif + + // We've done all that we can so base our return value on whether we have succeeded or not return (GetForegroundWindow() == hWnd); } Modified: trunk/plugins/IR Server Suite/Input Service/Input Service/Input Service.csproj =================================================================== --- trunk/plugins/IR Server Suite/Input Service/Input Service/Input Service.csproj 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/Input Service/Input Service/Input Service.csproj 2008-04-10 14:12:11 UTC (rev 1622) @@ -67,10 +67,12 @@ <ProjectReference Include="..\..\Common\IrssComms\IrssComms.csproj"> <Project>{BCAFDF45-70DD-46FD-8B98-880DDA585AD2}</Project> <Name>IrssComms</Name> + <Private>True</Private> </ProjectReference> <ProjectReference Include="..\..\Common\IrssUtils\IrssUtils.csproj"> <Project>{CA15769C-232E-4CA7-94FD-206A06CA3ABB}</Project> <Name>IrssUtils</Name> + <Private>True</Private> </ProjectReference> <ProjectReference Include="..\..\IR Server Plugins\IR Server Plugin Interface\IR Server Plugin Interface.csproj"> <Project>{D8B3D28F-62CE-4CA7-86CE-B7EAD614A94C}</Project> Modified: trunk/plugins/IR Server Suite/Input Service/Input Service/InputService.cs =================================================================== --- trunk/plugins/IR Server Suite/Input Service/Input Service/InputService.cs 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/Input Service/Input Service/InputService.cs 2008-04-10 14:12:11 UTC (rev 1622) @@ -144,15 +144,6 @@ /// <param name="args">The arguments.</param> protected override void OnStart(string[] args) { -#if DEBUG - IrssLog.LogLevel = IrssLog.Level.Debug; -#else - IrssLog.LogLevel = IrssLog.Level.Info; -#endif - IrssLog.Open("Input Service.log"); - - IrssLog.Info("Install folder: {0}", SystemRegistry.GetInstallFolder()); - IrssLog.Info("Starting Input Service ..."); LoadSettings(); @@ -468,8 +459,6 @@ { IrssLog.Error(ex); } - - IrssLog.Close(); } /// <summary> Modified: trunk/plugins/IR Server Suite/Input Service/Input Service/Program.cs =================================================================== --- trunk/plugins/IR Server Suite/Input Service/Input Service/Program.cs 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/Input Service/Input Service/Program.cs 2008-04-10 14:12:11 UTC (rev 1622) @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.ComponentModel; using System.Configuration.Install; #if TRACE using System.Diagnostics; @@ -35,57 +36,111 @@ /// <param name="args">Command line parameters.</param> static void Main(string[] args) { - if (args.Length == 1) +#if DEBUG + IrssLog.LogLevel = IrssLog.Level.Debug; +#else + IrssLog.LogLevel = IrssLog.Level.Info; +#endif + + try { - TransactedInstaller transactedInstaller = new TransactedInstaller(); - InputServiceInstaller inputServiceInstaller = new InputServiceInstaller(); - transactedInstaller.Installers.Add(inputServiceInstaller); + if (args.Length == 0) + { + IrssLog.Open("Input Service.log"); - string path = "/assemblypath=" + Assembly.GetExecutingAssembly().Location; - string[] cmdline = { path }; - - InstallContext installContext = new InstallContext(String.Empty, cmdline); - transactedInstaller.Context = installContext; - - if (args[0].Equals("/install", StringComparison.OrdinalIgnoreCase)) - { - transactedInstaller.Install(new Hashtable()); + InputService inputService = new InputService(); + ServiceBase.Run(inputService); } - else if (args[0].Equals("/uninstall", StringComparison.OrdinalIgnoreCase)) + else { - transactedInstaller.Uninstall(null); - } - else if (args[0].Equals("/start", StringComparison.OrdinalIgnoreCase)) - { - using (ServiceController serviceController = new ServiceController(ServiceName)) - if (serviceController.Status == ServiceControllerStatus.Stopped) - serviceController.Start(); - } - else if (args[0].Equals("/stop", StringComparison.OrdinalIgnoreCase)) - { - using (ServiceController serviceController = new ServiceController(ServiceName)) - if (serviceController.Status == ServiceControllerStatus.Running) - serviceController.Stop(); - } - else if (args[0].Equals("/restart", StringComparison.OrdinalIgnoreCase)) - { - using (ServiceController serviceController = new ServiceController(ServiceName)) + IrssLog.Open("Input Service - Command Line.log"); + + foreach (string parameter in args) { - if (serviceController.Status == ServiceControllerStatus.Running) - serviceController.Stop(); + switch (parameter.ToUpperInvariant()) + { + case "/INSTALL": + IrssLog.Info("Installing Input Service ..."); + using (TransactedInstaller transactedInstaller = new TransactedInstaller()) + { + using (InputServiceInstaller inputServiceInstaller = new InputServiceInstaller()) + { + transactedInstaller.Installers.Add(inputServiceInstaller); - serviceController.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 30)); + string path = "/assemblypath=" + Assembly.GetExecutingAssembly().Location; + string[] cmdline = { path }; - if (serviceController.Status == ServiceControllerStatus.Stopped) - serviceController.Start(); + InstallContext installContext = new InstallContext(String.Empty, cmdline); + transactedInstaller.Context = installContext; + + transactedInstaller.Install(new Hashtable()); + } + } + break; + + case "/UNINSTALL": + IrssLog.Info("Uninstalling Input Service ..."); + using (TransactedInstaller transactedInstaller = new TransactedInstaller()) + { + using (InputServiceInstaller inputServiceInstaller = new InputServiceInstaller()) + { + transactedInstaller.Installers.Add(inputServiceInstaller); + + string path = "/assemblypath=" + Assembly.GetExecutingAssembly().Location; + string[] cmdline = { path }; + + InstallContext installContext = new InstallContext(String.Empty, cmdline); + transactedInstaller.Context = installContext; + + transactedInstaller.Uninstall(null); + } + } + break; + + case "/START": + IrssLog.Info("Starting Input Service ..."); + using (ServiceController serviceController = new ServiceController(ServiceName)) + if (serviceController.Status == ServiceControllerStatus.Stopped) + serviceController.Start(); + break; + + case "/STOP": + IrssLog.Info("Stopping Input Service ..."); + using (ServiceController serviceController = new ServiceController(ServiceName)) + if (serviceController.Status == ServiceControllerStatus.Running) + serviceController.Stop(); + break; + + case "/RESTART": + IrssLog.Info("Restarting Input Service ..."); + using (ServiceController serviceController = new ServiceController(ServiceName)) + { + if (serviceController.Status == ServiceControllerStatus.Running) + serviceController.Stop(); + + serviceController.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 30)); + + if (serviceController.Status == ServiceControllerStatus.Stopped) + serviceController.Start(); + } + break; + + default: + throw new InvalidOperationException(String.Format("Unknown command line parameter \"{0}\"", parameter)); + } } + + IrssLog.Info("Done."); } - - return; } - - InputService inputService = new InputService(); - ServiceBase.Run(inputService); + catch (Exception ex) + { + IrssLog.Error(ex); + } + finally + { + IrssLog.Close(); + } } /// <summary> Modified: trunk/plugins/IR Server Suite/Input Service/Input Service Configuration/Configuration.csproj =================================================================== --- trunk/plugins/IR Server Suite/Input Service/Input Service Configuration/Configuration.csproj 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/Input Service/Input Service Configuration/Configuration.csproj 2008-04-10 14:12:11 UTC (rev 1622) @@ -115,10 +115,12 @@ <ProjectReference Include="..\..\Common\IrssComms\IrssComms.csproj"> <Project>{BCAFDF45-70DD-46FD-8B98-880DDA585AD2}</Project> <Name>IrssComms</Name> + <Private>True</Private> </ProjectReference> <ProjectReference Include="..\..\Common\IrssUtils\IrssUtils.csproj"> <Project>{CA15769C-232E-4CA7-94FD-206A06CA3ABB}</Project> <Name>IrssUtils</Name> + <Private>True</Private> </ProjectReference> <ProjectReference Include="..\..\IR Server Plugins\IR Server Plugin Interface\IR Server Plugin Interface.csproj"> <Project>{D8B3D28F-62CE-4CA7-86CE-B7EAD614A94C}</Project> Added: trunk/plugins/IR Server Suite/setup/Images/header.bmp =================================================================== (Binary files differ) Property changes on: trunk/plugins/IR Server Suite/setup/Images/header.bmp ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/IR Server Suite/setup/Images/wizard-svn.bmp =================================================================== (Binary files differ) Property changes on: trunk/plugins/IR Server Suite/setup/Images/wizard-svn.bmp ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/IR Server Suite/setup/Images/wizard.bmp =================================================================== (Binary files differ) Property changes on: trunk/plugins/IR Server Suite/setup/Images/wizard.bmp ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/plugins/IR Server Suite/setup/setup-languages.nsh =================================================================== --- trunk/plugins/IR Server Suite/setup/setup-languages.nsh 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/setup/setup-languages.nsh 2008-04-10 14:12:11 UTC (rev 1622) @@ -37,7 +37,7 @@ LangString DESC_SectionTV2BlasterPlugin ${LANG_ENGLISH} "For tuning external channels (on Set Top Boxes) with the default MediaPortal TV engine." LangString DESC_SectionGroupTV3 ${LANG_ENGLISH} "MediaPortal TV Server plugins." LangString DESC_SectionTV3BlasterPlugin ${LANG_ENGLISH} "For tuning external channels (on Set Top Boxes) with the MediaPortal TV server." -LangString DESC_SectionGroupMCE ${LANG_ENGLISH} "Windows Media Center Add-Ons." +LangString DESC_SectionGroupMCE ${LANG_ENGLISH} "Windows Media Center add-ons." LangString DESC_SectionMCEBlaster ${LANG_ENGLISH} "For tuning external channels (on Set Top Boxes) with Windows Media Center." LangString DESC_SectionTranslator ${LANG_ENGLISH} "Control your whole PC." LangString DESC_SectionTrayLauncher ${LANG_ENGLISH} "Simple program to launch an application of your choosing when a particular button is pressed." Modified: trunk/plugins/IR Server Suite/setup/setup.nsi =================================================================== --- trunk/plugins/IR Server Suite/setup/setup.nsi 2008-04-09 15:58:07 UTC (rev 1621) +++ trunk/plugins/IR Server Suite/setup/setup.nsi 2008-04-10 14:12:11 UTC (rev 1622) @@ -33,10 +33,10 @@ !define VERSION "${VER_MAJOR}.${VER_MINOR}.${VER_REVISION}" !else # it's an svn release !define BuildType "Debug" - !define VERSION "Debug build ${VER_MAJOR}.${VER_MINOR}.${VER_REVISION}.${VER_BUILD}" + !define VERSION "Test Build ${VER_MAJOR}.${VER_MINOR}.${VER_REVISION}.${VER_BUILD}" !endif -BrandingText "${PRODUCT_NAME} ${VERSION} by ${PRODUCT_PUBLISHER}" +BrandingText "${PRODUCT_NAME} - ${VERSION} by ${PRODUCT_PUBLISHER}" SetCompressor /SOLID /FINAL lzma ;====================================== @@ -62,15 +62,9 @@ Name "${PRODUCT_NAME}" OutFile "..\${PRODUCT_NAME} - ${VERSION}.exe" InstallDir "" -#InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" -#InstallDirRegKey HKLM "${REG_UNINSTALL}" InstallPath -!if ${VER_BUILD} != 0 - ShowInstDetails show - ShowUninstDetails show -!else - ShowInstDetails hide - ShowUninstDetails hide -!endif + +ShowInstDetails show +ShowUninstDetails show CRCCheck On ; Variables @@ -78,6 +72,9 @@ var DIR_MEDIAPORTAL var DIR_TVSERVER +var MP_INSTALLED +var TVSERVER_INSTALLED + #--------------------------------------------------------------------------- # INSTALLER INTERFACE settings #--------------------------------------------------------------------------- @@ -85,23 +82,22 @@ !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\win-install.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\win-uninstall.ico" -#!define MUI_HEADERIMAGE -#!if ${VER_BUILD} == 0 # it's a stable release -# !define MUI_HEADERIMAGE_BITMAP "images\header.bmp" -# !define MUI_WELCOMEFINISHPAGE_BITMAP "images\wizard.bmp" -# !define MUI_UNWELCOMEFINISHPAGE_BITMAP "images\wizard.bmp" -#!else # it's an svn release -# !define MUI_HEADERIMAGE_BITMAP "images\header-svn.bmp" -# !define MUI_WELCOMEFINISHPAGE_BITMAP "images\wizard-svn.bmp" -# !define MUI_UNWELCOMEFINISHPAGE_BITMAP "images\wizard-svn.bmp" -#!endif -#!define MUI_HEADERIMAGE_RIGHT +!define MUI_HEADERIMAGE +!define MUI_HEADERIMAGE_BITMAP "images\header.bmp" +!if ${VER_BUILD} == 0 + !define MUI_WELCOMEFINISHPAGE_BITMAP "images\wizard.bmp" + !define MUI_UNWELCOMEFINISHPAGE_BITMAP "images\wizard.bmp" +!else + !define MUI_WELCOMEFINISHPAGE_BITMAP "images\wizard-svn.bmp" + !define MUI_UNWELCOMEFINISHPAGE_BITMAP "images\wizard-svn.bmp" +!endif +!define MUI_HEADERIMAGE_RIGHT !define MUI_COMPONENTSPAGE_SMALLDESC !define MUI_FINISHPAGE_NOAUTOCLOSE ;!define MUI_FINISHPAGE_RUN_NOTCHECKED -;!define MUI_FINISHPAGE_RUN "$INSTDIR\Input Service Configuration\Input Service Configuration.exe" -;!define MUI_FINISHPAGE_RUN_TEXT "Run Input Service Configuration (generally not necessary)" +;!define MUI_FINISHPAGE_RUN "$DIR_INSTALL\Input Service Configuration\Input Service Configuration.exe" +;!define MUI_FINISHPAGE_RUN_TEXT "Run Input Service Configuration" !define MUI_UNFINISHPAGE_NOAUTOCLOSE @@ -117,41 +113,27 @@ ; MediaPortal install path !define MUI_PAGE_HEADER_TEXT "Choose MediaPortal Location" !define MUI_PAGE_HEADER_SUBTEXT "Choose the folder in which to install MediaPortal plugins." -!define MUI_DIRECTORYPAGE_TEXT_TOP "Setup will install MediaPortal plugins in the following folder.$\r$\n$\r$\nTo install in a different folder, click Browse and select another folder. Click Install to start the installation." +!define MUI_DIRECTORYPAGE_TEXT_TOP "Setup will install MediaPortal plugins in the following folder.$\r$\n$\r$\nTo install in a different folder, click Browse and select another folder. Click Next to continue." !define MUI_DIRECTORYPAGE_TEXT_DESTINATION "MediaPortal Folder" !define MUI_DIRECTORYPAGE_VARIABLE "$DIR_MEDIAPORTAL" !define MUI_PAGE_CUSTOMFUNCTION_PRE DirectoryPreMP -#!define MUI_PAGE_CUSTOMFUNCTION_SHOW DirectoryShowMP -#!define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirectoryLeaveMP !insertmacro MUI_PAGE_DIRECTORY ; TV Server install path - !define MUI_PAGE_HEADER_TEXT "Choose TV Server Location" !define MUI_PAGE_HEADER_SUBTEXT "Choose the folder in which to install TV Server plugins." -!define MUI_DIRECTORYPAGE_TEXT_TOP "Setup will install TV Server plugins in the following folder.$\r$\n$\r$\nTo install in a different folder, click Browse and select another folder. Click Install to start the installation." +!define MUI_DIRECTORYPAGE_TEXT_TOP "Setup will install TV Server plugins in the following folder.$\r$\n$\r$\nTo install in a different folder, click Browse and select another folder. Click Next to continue." !define MUI_DIRECTORYPAGE_TEXT_DESTINATION "TV Server Folder" !define MUI_DIRECTORYPAGE_VARIABLE "$DIR_TVSERVER" !define MUI_PAGE_CUSTOMFUNCTION_PRE DirectoryPreTV -#!define MUI_PAGE_CUSTOMFUNCTION_SHOW DirectoryShowTV -#!define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirectoryLeaveTV !insertmacro MUI_PAGE_DIRECTORY -; !!!!! changed the order of the directory pages, to prevent if -; no mp and no tve3 plugins were selected the page on irserversuite -; shows the NEXT button but the mpand tve3 pages abort and installation starts -; no both pages would abort and won't be shown, and -; irserver suite dir page shows the install button :-) - ; Main app install path !define MUI_PAGE_HEADER_TEXT "Choose ${PRODUCT_NAME} Location" !define MUI_PAGE_HEADER_SUBTEXT "Choose the folder in which to install ${PRODUCT_NAME}." -!define MUI_DIRECTORYPAGE_TEXT_TOP "Setup will install ${PRODUCT_NAME} in the following folder.$\r$\n$\r$\nTo install in a different folder, click Browse and select another folder. Click Next to continue." +!define MUI_DIRECTORYPAGE_TEXT_TOP "Setup will install ${PRODUCT_NAME} in the following folder.$\r$\n$\r$\nTo install in a different folder, click Browse and select another folder. Click Install to start the installation." !define MUI_DIRECTORYPAGE_TEXT_DESTINATION "${PRODUCT_NAME} Folder" !define MUI_DIRECTORYPAGE_VARIABLE "$DIR_INSTALL" -#!define MUI_PAGE_CUSTOMFUNCTION_SHOW DirectoryShowApp -#!define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirectoryLeaveApp -#!define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirectoryLeaveApp !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES @@ -194,84 +176,45 @@ !insertmacro "${MacroName}" "SectionDebugClient" !macroend -!macro initRegKeys - ${If} ${RunningX64} +;====================================== +!macro Initialize + + ${If} ${RunningX64} SetRegView 64 + ${Endif} - ${DisableX64FSRedirection} + ReadRegStr $DIR_INSTALL HKLM "Software\${PRODUCT_NAME}" "Install_Dir" + ReadRegStr $DIR_MEDIAPORTAL HKLM "Software\${PRODUCT_NAME}" "MediaPortal_Dir" + ReadRegStr $DIR_TVSERVER HKLM "Software\${PRODUCT_NAME}" "TVServer_Dir" - ; Get IR Server Suite installation directory ... - ReadRegStr $DIR_INSTALL HKLM "Software\${PRODUCT_NAME}" "Install_Dir" - ${If} $DIR_INSTALL == "" - StrCpy '$DIR_INSTALL' '$PROGRAMFILES\${PRODUCT_NAME}' - ${Endif} - - ; Get MediaPortal installation directory ... - ReadRegStr $DIR_MEDIAPORTAL HKLM "Software\${PRODUCT_NAME}" "MediaPortal_Dir" - ${If} $DIR_MEDIAPORTAL == "" - - ReadRegStr $DIR_MEDIAPORTAL HKLM "Software\Team MediaPortal\MediaPortal" "ApplicationDir" - - ${If} $DIR_MEDIAPORTAL == "" - !insertmacro MP_GET_INSTALL_DIR "$DIR_MEDIAPORTAL" - ${Endif} - - ${Endif} - - ; Get MediaPortal TV Server installation directory ... - ReadRegStr $DIR_TVSERVER HKLM "Software\${PRODUCT_NAME}" "TVServer_Dir" - ${If} $DIR_TVSERVER == "" - - ReadRegStr $DIR_TVSERVER HKLM "Software\Team MediaPortal\MediaPortal TV Server" "InstallPath" - - ${If} $DIR_TVSERVER == "" - !insertmacro TVSERVER_GET_INSTALL_DIR "$DIR_TVSERVER" - ${Endif} - - ${Endif} - - ${EnableX64FSRedirection} - - ${Else} - + ${If} ${RunningX64} SetRegView 32 + ${EnableX64FSRedirection} + ${Endif} - ; Get IR Server Suite installation directory ... - ReadRegStr $DIR_INSTALL HKLM "Software\${PRODUCT_NAME}" "Install_Dir" - ${If} $DIR_INSTALL == "" - StrCpy '$DIR_INSTALL' '$PROGRAMFILES\${PRODUCT_NAME}' - ${Endif} + ; Get MediaPortal installation directory ... + ${If} $DIR_MEDIAPORTAL == "" + !insertmacro MP_GET_INSTALL_DIR "$DIR_MEDIAPORTAL" + ${Endif} - ; Get MediaPortal installation directory ... - ReadRegStr $DIR_MEDIAPORTAL HKLM "Software\${PRODUCT_NAME}" "MediaPortal_Dir" - ${If} $DIR_MEDIAPORTAL == "" + ; Get MediaPortal TV Server installation directory ... + ${If} $DIR_TVSERVER == "" + !insertmacro TVSERVER_GET_INSTALL_DIR "$DIR_TVSERVER" + ${Endif} - ReadRegStr $DIR_MEDIAPORTAL HKLM "Software\Team MediaPortal\MediaPortal" "ApplicationDir" + ${If} ${RunningX64} + SetRegView 64 + ${DisableX64FSRedirection} + ${Endif} - ${If} $DIR_MEDIAPORTAL == "" - !insertmacro MP_GET_INSTALL_DIR "$DIR_MEDIAPORTAL" - ${Endif} - - ${Endif} - - ; Get MediaPortal TV Server installation directory ... - ReadRegStr $DIR_TVSERVER HKLM "Software\${PRODUCT_NAME}" "TVServer_Dir" - ${If} $DIR_TVSERVER == "" - - ReadRegStr $DIR_TVSERVER HKLM "Software\Team MediaPortal\MediaPortal TV Server" "InstallPath" - - ${If} $DIR_TVSERVER == "" - !insertmacro TVSERVER_GET_INSTALL_DIR "$DIR_TVSERVER" - ${Endif} - - ${Endif} - + ; Get IR Server Suite installation directory ... + ${If} $DIR_INSTALL == "" + StrCpy '$DIR_INSTALL' '$PROGRAMFILES\${PRODUCT_NAME}' ${Endif} - StrCpy $INSTDIR "$DIR_INSTALL" !macroend - + ;====================================== ;====================================== @@ -658,7 +601,7 @@ ;====================================== -SectionGroup /e "Media Center Add-Ons" SectionGroupMCE +SectionGroup /e "Media Center add-ons" SectionGroupMCE !if ${VER_BUILD} != 0 ${MementoSection} "Media Center Blaster (experimental)" SectionMCEBlaster @@ -688,12 +631,12 @@ !macro Remove_${SectionMCEBlaster} DetailPrint "Attempting to remove Media Center Blaster ..." - ; remove Start Menu shortcuts - Delete "$SMPROGRAMS\${PRODUCT_NAME}\Media Center Blaster.lnk" - ; Remove auto-run DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "Media Center Blaster" + ; remove Start Menu shortcuts + Delete "$SMPROGRAMS\${PRODUCT_NAME}\Media Center Blaster.lnk" + ; remove files RMDir /R /REBOOTOK "$DIR_INSTALL\Media Center Blaster" !macroend @@ -734,12 +677,12 @@ !macro Remove_${SectionTranslator} DetailPrint "Attempting to remove Translator ..." - ; remove Start Menu shortcuts - Delete "$SMPROGRAMS\${PRODUCT_NAME}\Translator.lnk" - ; Remove auto-run DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "Translator" + ; remove Start Menu shortcuts + Delete "$SMPROGRAMS\${PRODUCT_NAME}\Translator.lnk" + ; remove files RMDir /R /REBOOTOK "$DIR_INSTALL\Translator" !macroend @@ -773,12 +716,12 @@ !macro Remove_${SectionTrayLauncher} DetailPrint "Attempting to remove Tray Launcher ..." - ; remove Start Menu shortcuts - Delete "$SMPROGRAMS\${PRODUCT_NAME}\Tray Launcher.lnk" - ; Remove auto-run DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "Tray Launcher" + ; remove Start Menu shortcuts + Delete "$SMPROGRAMS\${PRODUCT_NAME}\Tray Launcher.lnk" + ; remove files RMDir /R /REBOOTOK "$DIR_INSTALL\Tray Launcher" !macroend @@ -919,9 +862,6 @@ ; Create folders CreateDirectory "$APPDATA\${PRODUCT_NAME}\Keyboard Input Relay" - ; Remove auto-run - DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "Keyboard Input Relay" - ; Create start menu shortcut CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Keyboard Input Relay.lnk" "$DIR_INSTALL\Keyboard Input Relay\KeyboardInputRelay.exe" "" "$DIR_INSTALL\Keyboard Input Relay\KeyboardInputRelay.exe" 0 @@ -929,6 +869,9 @@ !macro Remove_${SectionKeyboardInputRelay} DetailPrint "Attempting to remove Keyboard Relay ..." + ; Remove auto-run + DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "Keyboard Input Relay" + ; remove Start Menu shortcuts Delete "$SMPROGRAMS\${PRODUCT_NAME}\Keyboard Input Relay.lnk" @@ -1054,7 +997,9 @@ WriteUninstaller "$DIR_INSTALL\Uninstall ${PRODUCT_NAME}.exe" ; Create start menu shortcuts +!if ${VER_BUILD} == 0 CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Documentation.lnk" "$DIR_INSTALL\${PRODUCT_NAME}.chm" +!endif CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$DIR_INSTALL\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Log Files.lnk" "$APPDATA\${PRODUCT_NAME}\Logs" CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$DIR_INSTALL\Uninstall ${PRODUCT_NAME}.exe" "" "$DIR_INSTALL\Uninstall ${PRODUCT_NAME}.exe" @@ -1136,13 +1081,26 @@ Function .onInit -!insertmacro initRegKeys + ${IfNot} ${MP023IsInstalled} + ${AndIfNot} ${MPIsInstalled} + StrCpy '$MP_INSTALLED' 'FALSE' + ${Else} + StrCpy '$MP_INSTALLED' 'TRUE' + ${EndIf} -; reads components status for registry -${MementoSectionRestore} + ${IfNot} ${TVServerIsInstalled} + StrCpy '$TVSERVER_INSTALLED' 'FALSE' + ${Else} + StrCpy '$TVSERVER_INSTALLED' 'TRUE' + ${EndIf} -Call .onSelChange + !insertmacro Initialize + ; reads components status for registry + ${MementoSectionRestore} + + Call .onSelChange + FunctionEnd ;====================================== @@ -1183,20 +1141,21 @@ ;====================================== Function ComponentsPre -; ${IfNot} ${MP023IsInstalled} -; ${AndIfNot} ${MPIsInstalled} -; !insertmacro DisableComponent "${SectionGroupMP}" " ($(TEXT_MP_NOT_INSTALLED))" -; !insertmacro DisableComponent "${SectionMPCommon}" "" -; !insertmacro DisableComponent "${SectionMPControlPlugin}" "" -; !insertmacro DisableComponent "${SectionMPBlastZonePlugin}" "" -; !insertmacro DisableComponent "${SectionTV2BlasterPlugin}" "" -; ${EndIf} -; ${IfNot} ${TVServerIsInstalled} -; !insertmacro DisableComponent "${SectionGroupTV3}" " ($(TEXT_TVSERVER_NOT_INSTALLED))" -; !insertmacro DisableComponent "${SectionTV3Common}" "" -; !insertmacro DisableComponent "${SectionTV3BlasterPlugin}" "" -; ${EndIf} + ${If} $MP_INSTALLED == "FALSE" + !insertmacro DisableComponent "${SectionGroupMP}" " ($(TEXT_MP_NOT_INSTALLED))" + !insertmacro DisableComponent "${SectionMPCommon}" "" + !insertmacro DisableComponent "${SectionMPControlPlugin}" "" + !insertmacro DisableComponent "${SectionMPBlastZonePlugin}" "" + !insertmacro DisableComponent "${SectionTV2BlasterPlugin}" "" + ${Endif} + + ${If} $TVSERVER_INSTALLED == "FALSE" + !insertmacro DisableComponent "${SectionGroupTV3}" " ($(TEXT_TVSERVER_NOT_INSTALLED))" + !insertmacro DisableComponent "${SectionTV3Common}" "" + !insertmacro DisableComponent "${SectionTV3BlasterPlugin}" "" + ${Endif} + FunctionEnd ;====================================== @@ -1264,13 +1223,13 @@ ;====================================== Function FinishShow - ; This function is called, after the Finish Page creation is finished + ; This function is called, after the Finish Page creation is finished - ; It checks, if the Server has been selected and only displays the run checkbox in this case - ${IfNot} ${SectionIsSelected} SectionInputService - SendMessage $mui.FinishPage.Run ${BM_CLICK} 0 0 - ShowWindow $mui.FinishPage.Run ${SW_HIDE} - ${EndIf} + ; It checks, if the Server has been selected and only displays the run checkbox in this case + ${IfNot} ${SectionIsSelected} SectionInputService + SendMessage $mui.FinishPage.Run ${BM_CLICK} 0 0 + ShowWindow $mui.FinishPage.Run ${SW_HIDE} + ${EndIf} FunctionEnd ;====================================== @@ -1285,7 +1244,7 @@ Function un.onInit - !insertmacro initRegKeys + !insertmacro Initialize MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2 Abort This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |