From de9fcd67de00bcc9ffca6cb76b969bb2b5ad269c Mon Sep 17 00:00:00 2001 From: Eusebiu Marcu Date: Tue, 11 Jan 2011 15:37:17 +0200 Subject: [PATCH] Use the Environment to get the ProgramFiles location; Save Port when using IIS EXpress --- .../Debugger.AddIn/Service/WindowsDebugger.cs | 4 +- .../WebProjectOptions/WebProjectOptions.cs | 6 +- .../WebProjectOptionsPanel.xaml | 4 +- .../WebProjectOptionsPanel.xaml.cs | 89 ++++++++++++------- .../WebProjectService/WebProjectService.cs | 23 ++++- 5 files changed, 84 insertions(+), 42 deletions(-) diff --git a/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs b/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs index 9cd3ca17ba..a527cbc431 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Service/WindowsDebugger.cs @@ -166,7 +166,7 @@ namespace ICSharpCode.SharpDevelop.Services if (options.Data.WebServer == WebServer.IISExpress) { // start IIS express and attach to it if (WebProjectService.IISVersion == IISVersion.IISExpress) - System.Diagnostics.Process.Start(WebProjectService.IIS_EXPRESS_PROCESS_LOCATION); + System.Diagnostics.Process.Start(WebProjectService.IIISExpressProcessLocation); else { MessageService.ShowError("${res:ICSharpCode.WepProjectOptionsPanel.NoProjectUrlOrProgramAction}"); return; @@ -302,7 +302,7 @@ namespace ICSharpCode.SharpDevelop.Services if (options.Data.WebServer == WebServer.IISExpress) { // start IIS express if (WebProjectService.IISVersion == IISVersion.IISExpress) - System.Diagnostics.Process.Start(WebProjectService.IIS_EXPRESS_PROCESS_LOCATION); + System.Diagnostics.Process.Start(WebProjectService.IIISExpressProcessLocation); else { MessageService.ShowError("${res:ICSharpCode.WepProjectOptionsPanel.NoProjectUrlOrProgramAction}"); return; diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/WebProjectOptions/WebProjectOptions.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/WebProjectOptions/WebProjectOptions.cs index 9af85e54c7..b7b9b8ef9b 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/WebProjectOptions/WebProjectOptions.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/WebProjectOptions/WebProjectOptions.cs @@ -62,10 +62,10 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels [DefaultValue(null)] public string ProjectUrl { get; set; } - [DefaultValue(WebServer.None)] - public WebServer WebServer { get; set; } - [DefaultValue("8080")] public string Port { get; set; } + + [DefaultValue(WebServer.None)] + public WebServer WebServer { get; set; } } } diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/WebProjectOptions/WebProjectOptionsPanel.xaml b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/WebProjectOptions/WebProjectOptionsPanel.xaml index f8154a4a4e..80c75a1949 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/WebProjectOptions/WebProjectOptionsPanel.xaml +++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/WebProjectOptions/WebProjectOptionsPanel.xaml @@ -22,7 +22,9 @@ - + diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/WebProjectOptions/WebProjectOptionsPanel.xaml.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/WebProjectOptions/WebProjectOptionsPanel.xaml.cs index 030e9347b3..c51d0d381e 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/WebProjectOptions/WebProjectOptionsPanel.xaml.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/WebProjectOptions/WebProjectOptionsPanel.xaml.cs @@ -3,9 +3,9 @@ using System; using System.IO; +using System.Web.Services.Description; using System.Windows; using System.Windows.Controls; - using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Project; @@ -24,39 +24,41 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels if (CurrentProjectDebugData == null) CurrentProjectDebugData = new WebProjectDebugData(); - Loaded += delegate(object sender, RoutedEventArgs e) { - - if (!WebProjectService.IsIISInstalled) { - StatusLabel.Text = ResourceService.GetString("ICSharpCode.WepProjectOptionsPanel.IISNotFound"); - return; - } - - switch (CurrentProjectDebugData.WebServer) - { - case WebServer.IISExpress: - if (WebProjectService.IISVersion == IISVersion.IISExpress) { - UseIISExpress.IsChecked = true; - IISExpressGroup.IsEnabled = true; - CreateVirtualDirectoryButton.IsEnabled = true; - PortTextBox.Text = CurrentProjectDebugData.Port; - } - break; - case WebServer.IIS: - if (WebProjectService.IISVersion == IISVersion.IIS5 || - WebProjectService.IISVersion == IISVersion.IIS6 || - WebProjectService.IISVersion == IISVersion.IIS7 || - WebProjectService.IISVersion == IISVersion.IIS_Future) { - UseLocalIIS.IsChecked = true; - LocalIISGroup.IsEnabled = true; - CreateVirtualDirectoryButton.IsEnabled = true; - ProjectUrl.Text = CurrentProjectDebugData.ProjectUrl ?? string.Empty; - } - break; - default: - // do nothing - break; - } - }; + Loaded += OnLoaded; + } + + void OnLoaded(object sender, RoutedEventArgs e) + { + if (!WebProjectService.IsIISInstalled) { + StatusLabel.Text = ResourceService.GetString("ICSharpCode.WepProjectOptionsPanel.IISNotFound"); + return; + } + + switch (CurrentProjectDebugData.WebServer) + { + case WebServer.IISExpress: + if (WebProjectService.IISVersion == IISVersion.IISExpress) { + UseIISExpress.IsChecked = true; + PortTextBox.Text = CurrentProjectDebugData.Port; + + SelectIISExpress(); + } + break; + case WebServer.IIS: + if (WebProjectService.IISVersion == IISVersion.IIS5 || + WebProjectService.IISVersion == IISVersion.IIS6 || + WebProjectService.IISVersion == IISVersion.IIS7 || + WebProjectService.IISVersion == IISVersion.IIS_Future) { + UseLocalIIS.IsChecked = true; + ProjectUrl.Text = CurrentProjectDebugData.ProjectUrl ?? string.Empty; + + SelectLocalIIS(); + } + break; + default: + // do nothing + break; + } } WebProjectDebugData CurrentProjectDebugData { @@ -96,6 +98,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels } void UseIISExpress_Click(object sender, RoutedEventArgs e) + { + SelectIISExpress(); + } + + void SelectIISExpress() { WebProjectDebugData data = new WebProjectDebugData(); data.WebServer = WebServer.IISExpress; @@ -118,6 +125,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels } void UseLocalIIS_Click(object sender, RoutedEventArgs e) + { + SelectLocalIIS(); + } + + void SelectLocalIIS() { WebProjectDebugData data = new WebProjectDebugData(); data.WebServer = WebServer.IIS; @@ -182,5 +194,14 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels e.Handled = !AreAllValidNumericChars(e.Text); base.OnPreviewTextInput(e); } + + void PortTextBox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) + { + WebProjectDebugData data = new WebProjectDebugData(); + data.WebServer = WebServer.IISExpress; + data.Port = PortTextBox.Text; + data.ProjectUrl = string.Format(@"http://localhost:{0}/" + ProjectService.CurrentProject.Name, PortTextBox.Text); + CurrentProjectDebugData = data; + } } } \ No newline at end of file diff --git a/src/Main/Base/Project/Src/Services/WebProjectService/WebProjectService.cs b/src/Main/Base/Project/Src/Services/WebProjectService/WebProjectService.cs index c8c1e238fd..443d290136 100644 --- a/src/Main/Base/Project/Src/Services/WebProjectService/WebProjectService.cs +++ b/src/Main/Base/Project/Src/Services/WebProjectService/WebProjectService.cs @@ -46,11 +46,30 @@ namespace ICSharpCode.SharpDevelop.Project const string FRAMEWORK32 = @"Framework\"; const string FRAMEWORK64 = @"Framework64\"; + /// + /// Gets "iisexpress" string. + /// public const string IIS_EXPRESS_PROCESS_NAME = "iisexpress"; + + /// + /// Gets "aspnet_wp" string. + /// public const string IIS_5_PROCESS_NAME = "aspnet_wp"; + + /// + /// Gets "w3wp" string. + /// public const string IIS_NEW_PROCESS_NAME = "w3wp"; - public const string IIS_EXPRESS_PROCESS_LOCATION = @"C:\Program Files\IIS Express\iisexpress.exe"; + /// + /// Gets IIS Express process location. + /// + public static string IIISExpressProcessLocation { + get { + return Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) + + @"\IIS Express\iisexpress.exe"; + } + } /// /// Gets the IIS worker process name. @@ -158,7 +177,7 @@ namespace ICSharpCode.SharpDevelop.Project if (regValue > 4) return (IISVersion)regValue; - if (File.Exists(WebProjectService.IIS_EXPRESS_PROCESS_LOCATION)) + if (File.Exists(IIISExpressProcessLocation)) return IISVersion.IISExpress; return IISVersion.None;