Troubleshooting Outlook 2010 Restarts

I have been running Outlook 2010 since it first came out and for the most part I've been pretty happy with it.  Since I first started using it, though, I have had an issue with it.  Apparently out of the blue it would sometimes crash (usually right in the middle of writing an important email) forcing Outlook to restart. 

I spent some time researching this, and it appears that the crashes are most often caused by Outlook Add-Ins.  After looking at Event Viewer, that is the next place I would look.

Go to File -> Options.  That will bring up the Outlook Options window.  Click on Add-Ins in the lower left-hand menu.  That will list all the Add-ins that you have installed with Outlook. 

The next step I would recommend is removing all of the Add-ins and then start adding them back one by one over time to narrow down what is causing the issue.  To disable one or more Add-ins, at the bottom of the Outlook Options window on the Add-in Options page select 'COM Add-ins' beside Manage: and click the Go... button.  That will bring up the COM Add-Ins window where you can uncheck Add-ins that you want to disable.

In my case the 'Send to Bluetooth' Add-in was causing the issue.  once I disabled that I haven't had Outlook crash on me yet.

I hope this helps if you are experiencing the same issue that I was having.

Friday, August 20 2010   |   Tagged as:   |   Rick Barber   |   Comments

What Process is Using Your I/O?

This year OrcsWeb released our Windows Cloud Server product.  As part of that offering, a base amount of disk transactions (I/O) is included, and then you are billed for any usage above that.  A common question that arises is how to determine what is using the I/O on your server.

The easiest way to get a quick view into your I\O usage is to use Task Manager.  I will show you how to find that information.  First you need to open up Task Manager.  To do this, right click the task bar and choose Start Task Manager.  When you have it running, click the Processes tab.  Then from the menu choose View -> Select Columns... 
 
 
This will bring up the Select Process Page Columns.  Scroll down to the bottom and put a check beside I/O Reads, I/O Writes, I/O Read Bytes, and I/O Write Bytes. 
 
 
Click OK when you are finished and the columns will be added to Task Manager.  You should note that the numbers listed in Task Manager are totals for each of those items since the last boot of the system. 
 
Here is a description of the columns of the counters that were added to Task Manager above.
 
I/O Reads -  The number of read input/output operations generated by a process, including file, network, and device I/Os. I/O Reads directed to CONSOLE (console input object) handles are not counted.
I/O Writes - The number of write input/output operations generated by a process, including file, network, and device I/Os. I/O Writes directed to CONSOLE (console input object) handles are not counted.
I/O Read Bytes - The number of bytes read in input/output operations generated by a process, including file, network, and device I/Os. I/O Read Bytes directed to CONSOLE (console input object) handles are not counted.
I/O Write Bytes - The number of bytes written in input/output operations generated by a process, including file, network, and device I/Os. I/O Write Bytes directed to CONSOLE (console input object) handles are not counted.
 
You can look at the new columns that are showing up in Task Manager and see the processes that have used the most I/O since the last reboot of the server.  Often this is all the information you need to narrow down the top I/O usage per process.
 
Sometimes using Task Manager is not enough to help you narrow down the usage.  Maybe you need to know what is using the I\O right now or want to paint a picture of I\O usage over the next 7 days.  That is a good job for Performance Monitor.  Before we look at how to add the counters to Performance Monitor, here is the mapping of the Task Manager Columns that were described above and their corresponding Performance Monitor Counters:
 
Task Manager Performance Monitor
I/O Reads Process\I/O Read Operations/sec
I/O Writes Process\I/O Write Operations/sec
I/O Read Bytes Process\I/O Read Bytes/sec
I/O Write Bytes Process\I/O Write Bytes/sec
 
To start up Performance Monitor click the Start button.  In the 'Search programs and files' text box enter perfmon. 
 
 
Select perfmon that shows up in the results to open up Performance Monitor.  Once you have it open, select Performance Monitor from the left menu so that it is highlighted.  That will start allowing Performance Monitor to collect information.  Next click the green Plus icon to add a counter. 
 
 
When the Add Counters dialog window comes up, look for the Process object and click the plus to the right of it.  That will expand the counters that are under the Process object.  Based on the information that you got from Task Manager above, you can now add the appropriate counter.  You will notice that when you select a counter it also wants to know if you want the _Total (the total amount from all processes for that counter), 'all instances' which will add all the instances to Performance Monitor, or a specific process.  I recommend that you set the counter up for one or more specific processes that you previously found with the total highest I/O listed in Task Manager.  Choosing 'all instances' will make it hard to read the results and might cause some additional resource usage on your server. 

 
Using this information you should now be able to track down what is using the most I/O on your system.

NOTE:  The step by step instructions in this article are based on Windows 2008 R2.  The I/O information pertains to earlier Operating Systems as well but the actual steps might be different.
 

 

 

 

 

 

 

 

 

 

Tuesday, July 27 2010   |   Tagged as:   |   Rick Barber   |   Comments

Classic ASP and IIS7

I have seen numerous blogs written over the past couple of years talking about some of the challenges migrating a classic ASP application from IIS 5 or IIS 6 to IIS 7 or IIS 7.5.  However I still see a lot of new questions to various forums about these same issues.  I would like to provide some guidance on the first couple of steps that you should take to learn more about what is really going on with your application.

First you should note that script errors no longer show up in the browser by default.  Essentially any error that you get in classic ASP will throw a generic 500 error.  You should enable errors to be sent to the browser while you are troubleshooting any issues that you are having.  To do so open up IIS Manager on the server, select the server name in the left under Connections, and double click the ASP icon under IIS.  Expand 'Debugging Properties' and change 'Send Errors to Browser' to True.  You can also do this at an individual site level instead of the server level by selecting the site instead of the server in the left Connections pane.
 
 
You should note that if you are testing using Internet Explorer 8 you may also need to tweak the settings to properly see detailed error messages.  In Internet Explorer 8 go to 'Tools' -> 'Internet Options' then click on the 'Advanced' tab.  Scroll down to 'Show friendly HTTP error messages' and uncheck this box. 
 
 
Secondly you should ensure that your application pool is running in Classic mode instead of Integrated mode.  This will cause a large assortment of unexpected and unexplained behaviors in your classic ASP application.  The default IIS7 installation defaults to Integrated mode for the application pools so you will most likely need to change it.  To do that, right click on your application pool and select 'Advanced Settings...'  Under the '(General)' section change the 'Managed Pipeline Mode' from Integrated to Classic.  Click OK and your application will restart with the new changes.
 
 
Most other errors that you get from running a classic ASP application on IIS7.X can easily be resolved by searching the Internet for the specific error that you are getting.  
Wednesday, June 30 2010   |   Tagged as: ,   |   Rick Barber   |   Comments

IIS7 Redirects

IIS7 Redirects

There is often a need to redirect a domain name to another URL and there are a few ways to accomplish this.  One of the cleanest and simplest ways make this happen in IIS7 is to use a HTTP Redirect.  First you set up a site in IIS7 with the proper bindings to ensure only traffic that you want redirected will be served by this site and then configure a HTTP Redirect.   

On a side note, if you are looking to redirect more than just a domain name and need granular control over the redirect I suggest that you look at the URL Rewrite Module, http://www.iis.net/download/URLRewrite.  We have this module available on all of our IIS7 servers here at OrcsWeb.

Heading back to the discussion on HTTP Redirects, below is a screenshot of the HTTP Redirect screen that comes up when you choose that option in IIS.

What follows is a summary of the options on the screenshot.  You should note that IIS7 has a comprehensive online help where you can get additional information.

If you check the first box under Redirect Behavior, it will force all requests to redirect to the exact destination entered in the top box.  If you don’t check that box then requests will be relative to the destination entered.  For example, if you were redirecting http://www.orcsweb.com and the incoming request was http://www.orcsweb.com/service, based on the redirect entered above, requests would be redirected to http://test.orcsweb.com/testing with the box checked.  Without the box checked then requests would be redirected to http://test.orcsweb.com/testing/service.

If you check the second box under Redirect Behavior, it will redirect requests only to the subdirectory that you specified in the redirect destination.  For example, with the second box checked in the screenshot above, redirects would only be served from the /testing directory.

The status code drop-down box allows you to set one of three options: 

  • Found (302) – This will cause the web browser to issue a new request to the redirect destination.
  • Permanent(301) – This tells the web browser that the resource it requested has permanently changed to the redirect destination.  This is what you will want to select if you need to preserve your search engine ranking and the URL is changing permanently.
  • Temporary (307) – This prevents the browser from losing data when a HTTP POST request is issued and is a new option in IIS7.

The biggest reason I am writing this blog post is to mention the one caveat that I have run into when using a HTTP Redirect in IIS7.  There appears to be some dependency on the physical path set in the advanced settings of the site.  I know that sounds crazy but I have run into it a few times.  Here is a scenario to explain this further. 

Someone has more than one domain name pointing to a single website.  Down the road they need one or more of those domain names to redirect somewhere else.  The most convenient thing to do is set up a new site with the intention of using a HTTP Redirect once the site is setup.  For consistency’s sake you point that other site to the same location as the original site.  As soon as you setup the redirect it will set the redirect for every single site that is pointed to that same physical path in IIS.  The way to get around it is to set each site to point to a different location.

Wednesday, May 19 2010   |   Tagged as: ,   |   Rick Barber   |   Comments

Sorting WSS 3.0 Quick Launch

I ran into an issue today trying to get the Quick Launch in WSS 3.0 to sort the document libraries I had in there alphabetically.  This site is a sub site of the main SharePoint site.  I thought I looked at all of the settings but nothing stood out to me.

I then turned to searching the Internet.  I spent more time looking for a solution to this than I care to admit.  I found quite a few posts about others having the same issue.  I also found numerous solutions where I could add custom code, custom web parts, and so forth.  I finally came across a post that had enough clues in it that I was able to find an easy solution.

First, go to the main page of the site that you want to set the sorting of the Quick Launch on.  Next go to 'Site Actions' in the upper left corner, and select 'Site Settings.'  Under 'Look and Feel' select 'Navigation'

You will note that under 'Sorting' the option is defaulted to 'Sort manually.'  Even if the main site is set to sort automatically, this does not inherit by default to any new site created under it.  This is the setting that you want to change, though, and it will affect everything in the Quick Launch.  Other lists are set by the views by the list and not this setting.

Once you change that to automatic, you can then change a few Automatic Sorting options.

I hope this saves you some time and frustration when you are trying to change the sorting on WSS 3.0 Quick Launch items.

Wednesday, February 18 2009   |   Rick Barber   |   Comments

Configuring Windows to Audit Common Security Issues

There are numerous issues that I have seen come up regarding IIS not working properly, and many of those are due to improper permissions.  Many of these issues can efficently be tracked down by using Event Viewer -> Security.  However, the default installation of Windows does not set everything needed to properly take advantage of this.  Here are some settings that I recommend changing which will make initial troubleshooting easier.

We are first going to change the Local Security Policy by enabling failures of some policies.  Go to Administrative Tools -> Local Security Policy.  When the Local Security Settings window comes up, expand Local Policy and select Audit Policy.  Select the following three policies and check the box for Failure to log failures of those events:

Audit account logon events
Audit logon events
Audit object access

Next you also want to turn on auditing for all the partitions on the computer if you are using Windows Server.  To do that open up Windows Explorer, right click on a partition, and choose Properties.  Click the Security tab in the properties window, then click the Advanced button.  Select the Auditing tab in the Advanced Security Settings window, then click the Add button.  Enter everyone and click OK.  In the Auditing Entry dialogue box, check the Failed box on Full Control.  That will cause all the boxes in the Failed column to be checked.  Select ok all the way back out.  Now disk level auditing is enabled.

You can look for security issues first when you have problems and enough information should now be logged to better assist you.

Friday, February 08 2008   |   Tagged as:   |   Rick Barber   |   Comments

Getting IUSR and IWAM Default Passwords

I came across this today and wanted to share.  I have looked for this in the past with little success so maybe you will come across this post when you need it.  Sometimes you need the default password that was assigned to IUSR_MachineName and IWAM_MachineName from when you initially installed IIS.  That information is actually quite easy to get.

First make a copy of adsutil.vbs located in c:\inetpub\adminscripts, name it something else, and move it to a folder with locked down permissions:
copy c:\inetpub\adminscripts\adsutil.vbs c:\admin\adsutil_iispw.vbs

While you could certainly put the copy in the same location and delete it when you are done, I prefer to put it in a location that only administrators have access to so I can easily reference it in the future.  It all depends on what your best practice security measures are.

Next edit adsutil_iispw.vbs and go to line 2592.  It currently reads:

IsSecureProperty = True

Edit it so that it reads:

IsSecureProperty = False 

Save adsutil_iispw.vbs and close it.  Remember  that any time you are editing script files, config files, etc., you are best off using Notepad so that extra characters and formatting are not saved to the file which would prevent it from running properly.

Now you can run the following to get the IUSR password:

cscript c:\admin\adsutil_iispw.vbs get w3svc/anonymoususerpass

or the following to get the IWAM password:

cscript c:\admin\adsutil_iispw.vbs get w3svc/wamuserpass

I hope this helps when you need it!

Tuesday, January 08 2008   |   Tagged as:   |   Rick Barber   |   Comments

Sending Multiple Values To Another Page From GridView

I am working on a project right now that requires me to send multiple values to another page from a GridView.  The GridView control in ASP.Net 2.0 makes it easy to send a single value through the URL and it doesn't take very long searching the Internet to find many people who have provided this information.  I might add that it is part of the tooltip for the Gridview if you go through the settings of editing the columns in Visual Studio 2005.  There are also a multitude of suggestions from many people on passing multiple values but after I tried numerous options, I could not get any of them to work.  I did stumble across an article from Azam Sharp that finally got me going in the right direction:  http://www.gridviewguy.com/ArticleDetails.aspx?articleID=133.  While the fundamentals of my application use the foundation of Azam's article, the final product is different enough from the article to make me include it here.

 First we need to create a GridView with the columns that we need.  For better control we will need to use TemplateFields.

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:TemplateField HeaderText="Field1">
            <ItemTemplate>
                <asp:HyperLink ID="hlField1" runat="server" NavigateUrl='<%# FormatUrl(Eval("Field1"),Eval("Field2"),Eval("Field3")) %>' Text='<%# Eval("Field1") %>'></asp:HyperLink>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Field2">
            <ItemTemplate>
                <asp:Label ID="lblField2" runat="server" Text='<%# Eval("Field2") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Field3">
            <ItemTemplate>
                <asp:Label ID="lblField3" runat="server" Text='<%# Eval("Field3") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

We also need to bind our data to the GridView.  In this specific case I am using an XML file.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim oDs As New DataSet
    oDs.ReadXml(Request.PhysicalApplicationPath + "myFile.xml")
    GridView1.DataSource = oDs
    GridView1.DataBind()
End Sub

You will notice in my GridView that I am calling a function, FormatURL. In this specific implementation it is accepting 3 values that it will build into the string that it returns.

Public Function FormatURL(ByVal str1 As String, ByVal str2 As String, ByVal str3 As String) As String
    Return "pagedetail.aspx?id1=" & str1 & "&id2=" & str2 & "&id3=" & str3
End Function

The only thing left to do is to retrieve the querystrings on the new page, pagedetail.aspx in this case.

Dim str1 As String = Request.QueryString("id1")
Dim str2 As String = Request.QueryString("id2")
Dim str3 As String = Request.QueryString("id3")

As you can see, with this basic outline, there is tremendous power in the GridView and what you can do with it using a minimal amount of coding.

Friday, August 24 2007   |   Tagged as:   |   Rick Barber   |   Comments

Loss of Network Connectivity and Local Area Connection

The other day I came across something out of the ordinary.  After some major configuration changes to the server after a reboot it lost network connectivity.  After looking at the server from the console, the Local Area Connection was missing from Network Connections and I couldn't connect to it through RDC.  Checking system event viewer gave some information:

 4292 - The IPSec driver has entered Block mode. IPSec will discard all inbound and outbound TCP/IP network traffic that is not permitted by boot-time IPSec Policy exemptions. User Action: To restore full unsecured TCP/IP connectivity, disable the IPSec services, and then restart the computer.

32777 - The LSA was unable to register its RPC interface over the TCP/IP interface. Please make sure that the protocol is properly installed.

12291 - SAM failed to start the TCP/IP or SPX/IPX listening thread.

Well I took the advice of the first error, disabled the IPSec service, rebooted the server, and voila!  I was able to connect to the server.  However Local Area Connection was still not showing in Network Connections.  After some digging I found a solution:

Solution:  (This involves a direct registry edit.  Be very careful with changes that you make because incorrect changes could make your system unstable or inoperable) 

Go into services and find Remote Procedure Call (RPC) Service.  Change the account that it runs under to a Local System Account.

Open registry editor (regedit from a command prompt) and backup the following keys:

  • HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Winsock
  • HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Winsock2

Once you have a backup of those keys, delete them.

Highlight HKEY_LOCAL_MACHINE and then select 'File' -> 'Load Hive...'

Browse to C:\Windows\Repair and select 'SYSTEM'

  • Side note:  Hopefully at one point or another you've run a system state backup so you actually have a backup copy of the registry in this folder.  If not you really need to do so on every machine of yours

When asked for a key name, call it Temp

Locate and export the following keys:

  • HKEY_LOCAL_MACHINE\Temp\ControlSet001\Services\Winsock
  • HKEY_LOCAL_MACHINE\Temp\ControlSet001\Services\Winsock2

Open those keys that you just exported in notepad, and search and replace the text to the appropriate path below:  (I search for Temp\ControlSet001 and replace all instances with system\CurrentControlSet in both files)

  • HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Winsock
  • HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Winsock2

Highlight the Temp hive file and select 'File' -> 'Unload Hive...'

Now double click both of the files above that you replaced the text in to add that information to the registry and verify that the keys are properly there.

Reboot the machine.

After you reboot, verify that you can now see Local Area Connection.

Now we need to change back the Remote Procedure Call (RPC) Service to Network Service.

Open registry editor and find the following key:

  • HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\RpcSs

Edit the subkey, ObjectName and change the data to NT AUTHORITY\NetworkService

You will need to reboot once again for this final change to take effect.  Everything should be back to normal.  I continued to search and still don't know what causes this problem but I have see what seems to be quite a few people have the issue or similiar issues.  Here is a link that has similar instructions to the ones I provided and was very helpful in resolving my issue:  http://www.bensingerconsulting.com/support/helpdesk/issue_view.asp?ID=10&CATE=0

Thursday, May 17 2007   |   Tagged as:   |   Rick Barber   |   Comments

Configuring IIS for WPF/E

As I'm sure you know, WPF/E is a client side technology.  However there are still come settings that need to be changed at the server level for WPF/E to work properly on your site. 

  1. Change content expiration to 1 minute
  2. Add some MIME types:
    • .manifest - application/manifest
    • .xaml - application/xaml+xml
    • .application - application/x-ms-application
    • .xbap - application/x-ms-xbap
    • .deploy - application/octet-stream
    • .xps - application/vnd.ms-xpsdocument

For more detailed instructions and information including a script to make these changes quickly check out this link:  http://msdn2.microsoft.com/en-us/library/ms752346.aspx

 

Friday, March 23 2007   |   Tagged as:   |   Rick Barber   |   Comments

Subscribe

RSS FeedYou can subscribe to Rick Barber feed via RSS to receive updates when new entries are posted.

@OrcsWeb

  • Thanks for the kudo shout-out! RT @leebrandt: I gotta say, @orcsweb has been really responsive in setting up my hosting stuff.
  • RT @julielerman: darling devs using EF: unless you're intimately aware of how EF works, please don't use long-running ObjectContexts in ...
  • RT @scottgu: Very cool VS extension that runs pages using different browsers: http://bit.ly/bvnj5b