Olav Aukan Getting information off the Internet is like taking a drink from a fire hydrant…

31Aug/10

Creating an ActiveX control in .Net using C#

A while back I had a client request that I write an ActiveX control for use on their corporate intranet. I had never done this before, and most of the examples I could find online were either really old, incomplete or based on using C++ and MFC. It's safe to say that my C++ skills are not quite up to the job, so for me it was really a requirement to be able to do this with C#. It took me about an hour or two to write the code for the control, but it took almost three days to successfully package and deploy it as a .cab file... So to save others from wasting their time like I did, I'll document my findings in this post.

Steps

  1. - Create a new Class Library project in Visual Studio
  2. - Create a new class that inherits from UserControl
  3. - Create a new interface that exposes the controls methods and properties to COM interop
  4. - Make the control class implement the new interface
  5. - Mark the control as safe for scripting and initialization
  6. - Create a .msi installer for the control
  7. - Package the control in a .cab file for web deployment
  8. - Initialize and test the control with JavaScript

1. Create a new Class Library project in Visual Studio

I'm using Visual Studio 2008, but other versions should work as well.

  1. After starting Visual Studio click File -> New -> Project and select Class Library under C#.
  2. Call the project 'AxControls' and click OK.

2. Create a new class that inherits from UserControl

  1. Rename 'Class1.cs' to 'HelloWorld.cs', making sure to rename the class name as well.
  2. Add a project reference to System.Windows.Forms.
  3. Make the HelloWorld class inherit UserControl.

3. Create a new interface that exposes the controls methods and properties to COM interop

  1. Right click the project in Visual Studio and click Add -> New Item.
  2. Select 'Interface' from the list of components, name it 'IHelloWorld.cs' and click Add.
  3. Edit the 'IHelloWorld.cs' file so it looks like this:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    
    namespace AxControls
    {
        [ComVisible(true)]
        [InterfaceType(ComInterfaceType.InterfaceIsDual)]
        [Guid("41E85D5D-C57A-4386-B722-4031D0B1E1B7")]
        public interface IHelloWorld
        {
            string GetText();
        }
    }
    

We now have a COM visible interface with a single method 'GetText()'.

[ComVisible(true)] makes the interface visible to COM.
[InterfaceType(ComInterfaceType.InterfaceIsDual)] sets the COM interface type to Dual, see InterfaceTypeAttribute Class on MSDN.
[Guid("41E85D5D-C57A-4386-B722-4031D0B1E1B7")] let's us manually assign a GUID to the interface. Use guidgen.exe to generate your own.

4. Make the control class implement the new interface

Make the HelloWorld class implement the IHelloWorld interface and have the GetText() method return a string of your choice. This is what the file might look like:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace AxControls
{
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    [Guid("1FC0D50A-4803-4f97-94FB-2F41717F558D")]
    [ProgId("AxControls.HelloWorld")]
    [ComDefaultInterface(typeof(IHelloWorld))]
    public class HelloWorld : UserControl, IHelloWorld
    {
        #region IHelloWorld Members

        public string GetText()
        {
            return "Hello ActiveX World!";
        }

        #endregion
    }
}

We now have a COM visible control that implements the IHelloWorld interface.

[ComVisible(true)] makes the control visible to COM, see ComVisibleAttribute Class on MSDN.
[ClassInterface(ClassInterfaceType.None)] indicates that no class interface is generated for this class, see ClassInterfaceType Enumeration on MSDN.
[Guid("1FC0D50A-4803-4f97-94FB-2F41717F558D")] let's us manually assign a GUID to the control, see GuidAttribute Class on MSDN. Use guidgen.exe to generate your own.
[ProgId("AxControls.HelloWorld")] is a "user friendly" ID that we'll use later from JavaScript when initiating the control, see ProgIdAttribute Class on MSDN.
[ComDefaultInterface(typeof(IHelloWorld))] sets IHelloWorld as the default interface that will be exposed to COM, see ComDefaultInterfaceAttribute Class on MSDN.

5. Mark the control as safe for scripting and initialization

By default IE will not allow initializing and scripting an ActiveX control unless it is marked as safe. This means that we won't be able to create instances of our ActiveX class with JavaScript by default. We can get around this by modifying the browser security settings, but a more elegant way would be to mark the control as safe. Before you do this to a "real" control, be sure to understand the consequences. I found an ancient (1996) MSDN article that explains this here. We will mark the control as safe by implementing the IObjectSafety interface.

  1. Right click the project in Visual Studio and click Add -> New Item.
  2. Select 'Interface' from the list of components, name it 'IObjectSafety.cs' and click Add.
  3. Edit the 'IObjectSafety.cs' file so it looks like this:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    
    namespace AxControls
    {
        [ComImport()]
        [Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
        [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        interface IObjectSafety
        {
            [PreserveSig()]
            int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions);
    
            [PreserveSig()]
            int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions);
        }
    }
    
  4. Make the HelloWorld class implement the IObjectSafety interface. The end result should look something like this:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    
    namespace AxControls
    {
        [ComVisible(true)]
        [ClassInterface(ClassInterfaceType.None)]
        [Guid("1FC0D50A-4803-4f97-94FB-2F41717F558D")]
        [ProgId("AxControls.HelloWorld")]
        [ComDefaultInterface(typeof(IHelloWorld))]
        public class HelloWorld : UserControl, IHelloWorld, IObjectSafety
        {
            #region IHelloWorld Members
    
            public string GetText()
            {
                return "Hello ActiveX World!";
            }
    
            #endregion
    
            #region IObjectSafety Members
    
            public enum ObjectSafetyOptions
            {
                INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001,
                INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002,
                INTERFACE_USES_DISPEX = 0x00000004,
                INTERFACE_USES_SECURITY_MANAGER = 0x00000008
            };
    
            public int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
            {
                ObjectSafetyOptions m_options = ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_CALLER | ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_DATA;
                pdwSupportedOptions = (int) m_options;
                pdwEnabledOptions = (int) m_options;
                return 0;
            }
    
            public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions)
            {
                return 0;
            }
    
            #endregion
        }
    }
    

[ComImport()] IObjectSafety is a native interface so we have to redefine it for managed .Net use. This is done with the ComImport() attribute, see ComImportAttribute Class on MSDN.
[Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")] This is the GUID of the original IObjectSafety interface. Do not change it.
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] sets the COM interface type to Unknown, see InterfaceTypeAttribute Class on MSDN.

This is just a simple implemetation of the IObjectSafety interface that will mark the control as safe. In "real life" there would probably be some sort of logic to determine if the control is safe or not.

6. Create a .msi installer for the control

Before an ActiveX control can be used it must be installed and registered on the client. This can be done in a number of ways, from manually editing the registry to using regasm.exe, but we're going to create a Vistual Studio setup project to handle the installation for us.

  1. Right click the Visual Studio solution, select Add -> New Project and select Setup Project under Other Project Types.
  2. Call the project 'AxControlsInstaller' and click OK.
  3. Right click the 'AxControlsInstaller' project, select Add -> Project Output, select 'Primary output' from the 'AxControls' project and click OK.
  4. Right click 'Primary output from AxControls (Active)' and select Properties.
  5. Change the Register property from 'vsdrpDoNotRegister' to 'vsdrpCOM'.
  6. Right click the 'AxControlsInstaller' project and select Build.

The installer should now be located in the AxControlsInstaller's output folder (bin\Debug or bin\Release). In the corporate domain this .msi file can de run manually on the client, or automatically with a Group Policy.

7. Package the installer in a .cab file for web deployment

For public web sites we obviously can't deploy our ActiveX control to the client with a Group Policy. In this case we're gonna have to use Internet Explores built-in ability to download and install controls that are packaged in .cab files.

  1. Download the Microsoft Cabinet Software Development Kit.
  2. Unpack the kit to a local folder and copy Cabarc.exe to the 'AxControlsInstaller' folder.
  3. Create a new file named 'AxControls.inf' in the 'AxControlsInstaller' folder and add the following content:
    [version]
    signature="$CHICAGO$"
    AdvancedINF=2.0
    
    [Add.Code]
    AxControlsInstaller.msi=AxControlsInstaller.msi
    
    [AxControlsInstaller.msi]
    file-win32-x86=thiscab
    clsid={1FC0D50A-4803-4f97-94FB-2F41717F558D}
    FileVersion=1,0,0,0
    
    [Setup Hooks]
    RunSetup=RunSetup
    
    [RunSetup]
    run="""msiexec.exe""" /i """%EXTRACT_DIR%\AxControlsInstaller.msi""" /qn
    
  4. Click the AxControlsInstaller project and then click the Properties window (View -> Properties Window if it's not visible).
  5. Click the '...' button next to the PostBuildEvent property and add the following content:
    "$(ProjectDir)\CABARC.EXE" N "$(ProjectDir)AxControls.cab" "$(ProjectDir)AxControls.inf" "$(ProjectDir)$(Configuration)\AxControlsInstaller.msi"
    
  6. Right click the 'AxControlsInstaller' project and select Build.
  7. There should now be a 'AxControls.cab' file in the 'AxControlsInstaller' folder.

NB! Make sure you use ANSI encoding for the 'AxControls.inf' file or you will be unable to install the control.

8. Initialize and test the control with JavaScript

  1. Right click the AxControls solution, select Add -> New Project and select 'ASP.Net Web Application' under 'Web'.
  2. Call the project 'WebAppTest' and click OK.
  3. Right click the 'WebAppTest' project, select Add -> New Item and select 'HTML Page'.
  4. Call it 'index.html' and click OK.
  5. Add the following content to index.html:
    <html>
        <head>
    
            <object name="axHello" style='display:none' id='axHello' classid='CLSID:1FC0D50A-4803-4f97-94FB-2F41717F558D' codebase='AxControls.cab#version=1,0,0,0'></object>
    
          <script language="javascript">
    
            <!-- Load the ActiveX object  -->
            var x = new ActiveXObject("AxControls.HelloWorld");
    
            <!-- Display the String in a messagebox -->
            alert(x.GetText());
    
          </script>
        </head>
        <body>
        </body>
    </html>
    

    Note that 'classid' matches the GUID of the HelloWorld control.

  6. Right click 'index.html' and select 'Set as start page'.
  7. Right click the 'WebAppTest' project and select 'Set as startup project'.
  8. Copy 'AxControls.cab' from the 'AxControlsInstaller' folder to the same folder as index.html.
  9. Uninstall the control from the client by going to Control Panel -> Programs and Features, selecting 'AxControlsInstaller' on the list and clicking Uninstall. This forces Internet Explorer to download and install the .cab file and is an important step in case you've already installed the control.
  10. Run the application (F5). This will open 'index.html' in Internet Explorer.
  11. Internet Explorer will display a security warning, asking if you want to install 'AxControls.cab'. Click Install.
  12. When the page loads it should display a message box with the string you defined in HelloWorld's GetText() method.

If the message box displayed without any more warnings or errors we've implemented everyting correctly.

UPDATE

I forgot to write that you have to register the assembly containing the ActiveX control for COM interop. Right-click the project, select Properties, go to Build and check the "Register for COM interop" checkbox. This should solve the error some of you are seeing about "Automation Server can’t create this object" and similar error messages. You might need to add the [ComVisible(true)] attribute to the methods and properties you are exposing as well, but I haven't had time to test this.

Comments (219) Trackbacks (6)
  1. you’ll want to consider standards reminiscent of if you are going for a winning strike or be it designed to put the other fighter outside positioning, specifically it’s now possible play the other players produce look if he or she have that and back you’ll can play in the,

  2. MK Finally Available in Chinese as well as Spanish language!
    shop cheap michael michael kors large layton shoulder tote navy leather wholesale http://www.melcove.com/ayuda/michael-kors-handbags-at-macy/etxcwfwc-p-601.html

  3. Here Is A Practice That’s Actually Helping MK-specialists To Rise
    top quality michael kors hamilton woven baldric tote gloden no taxes http://www.shambalapetithotel.com/wp-content/michael-kors-discounts-coupons/nxisgkqp-p-70.html

  4. Hard to find review provides the truth on gucci which experts state not very many persons know.
    new arrival gucci card case 120965 ahb1r 6214 gucci handbags outlet get more green back http://www.gulftamyeez.com/products/gucci-for-men-on-sale/gucci-discount-outlet/gucci-card-case-120965-ahb1r-6214—gucci-handbags-outlet-p-4861.html

  5. Concise article content will show you all details for MONCLER as well as what you must do straight away.
    best deals of moncler down jackets women rib long sleeve shirt black bargain blast http://www.nehlsrealty.com/page/moncler-jackets-women-sale/moncler-womens-coats/moncler-down-jackets-women-rib-long-sleeve-shirt-black-p-214.html

  6. Wipe Out MONCLER Difficulties For Good
    high quality moncler for women coat euramerican style long orange clearance online http://www.mdgfoa.org/gray/women-moncler-vest/bppgtqqk-p-709.html

  7. A MK-crank Definitely makes the whole MK philosophy So Challenging
    online cheap michael michael kors gia satchel luggage leather outlet online http://www.gestalt-mty.com/articles/where-are-michael-kors-purses-made/lauppxpf-p-826.html

  8. To Opportunity Seekers Who Would Like To become skilled at gucci But Finding it difficult to Move On
    new arrival gucci 2012 sneakers in canvas in white g486 in the official store http://www.masoudsoheili.com/News/herve-leger-one-shoulder-dress/fpwsipyx-p-455.html

  9. gucci-boy has confirmed the most up-to-date algorithm formula . . . learning to make a lot of money completely from scratch
    official gucci loafers in leahter in black g010 with up to % 80 off http://www.foulire.com/eleves/gucci-outlet-gucci/hmgyltgb-p-700.html

  10. Every thing you don’t know regarding nfl jersey could very well be costing much more than you think.
    designer luxurious nike geno atkins womens jersey bengals green black white authentic save in every aisle products http://3dbeaufort.com/news/cheap-nfl-jerseys-big-and-tall/bulmdaig-p-55.html

  11. One Of The Most Detailed gucci Guide book You Ever Witnessed Or else Your Money Back
    various gucci medium computer case with interlocking g detail 194297 fjg4x 1000 gucci handbags outlet free shipping http://www.racesmith.com/results/gucci-purses-sale/vmyxrrmc-p-741.html

  12. tackle reveal to you an modify with regard to succeed we have elected with each one of these projects past I side the call back to ed,

  13. nfl jersey gives brand new lifespan for an old challenge– defacto primary
    one day only ravens jacoby jones black silver white jersey nike womens mens factory price http://www.dhabaindianbistro.com/images/women-nfl-jerseys-for-cheap/ghana-soccer-jerseys/czqgwqeq-p-822.html

  14. Information about how nfl jersey Helped Me Quickly becoming Rich And Famous
    buy discount adrian peterson blue navy white jersey nike throwback vikings elite barrel of bargains http://www.louisfusco.com/css/cotton-button-baseball-jerseys/fcxapzrs-p-644.html

  15. Find who is raving about nfl jersey and also the main reason why you should feel concerned.
    buy cheap authentic jordy nelson blue grey white ladies mens kids wholesale http://www.victorianvintagespeedway.com/flash/cheap-replica-nfl-jerseys/buy-soccer-jerseys-online-singapore/mfcxqgaw-p-44.html

  16. The Incredible Creative nfl jersey technique Unveiled By My Mate
    lowest price troy polamalu red white gold jersey throwback steelers elite limited we predict unlimited values http://www.aleenta.com/blog/china-cheap-hockey-jerseys/limited-and-elite-nike-nfl-jerseys/grzxxkir-p-781.html

  17. The Best Procedures To Learn nfl jersey And Also How One Could Become a member of The nfl jersey Top dogs
    2014 new emmanuel sanders jersey nike steelers authentic emmanuel sanders black blue white supper summer savings http://www.susanwhymark.co.uk/Styles/authentic-nfl-jerseys-customized/ncaa-customized-jerseys/lmigubnt-p-782.html

  18. Specifically what all others has been doing when dealing with nfl jersey and those actions you are looking to handle totally different.
    official website owen daniels jersey nike texans authentic owen daniels blue white clearance sale http://allencountyfairgroundsin.com/node/jabbar-yellow-nba-basketball-jerseys/owen-daniels-jersey-nike-texans-authentic-owen-daniels-blue-white–p-9728.html

  19. To Those People Who Would Like To learn about nfl jersey But Cannot Get Rolling
    january jamboree savings spree luke joeckel womens mens youth jersey authentic elite limited game online http://www.alkamda.com/alkamda/rugby-jerseys-custom/2014-kids-soccer-jerseys/convzpuz-p-474.html

  20. Heya just wanted to give you a quick heads up and let
    you know a few of the images aren’t loading correctly. I’m not sure
    why but I think its a linking issue. I’ve tried it in two different internet
    browsers and both show the same outcome.

  21. 1 Of The Most Complete nfl jersey Guide You Ever Seen Or else Your Money Back
    cheap new arrival nike cardinals authentic patrick peterson green orange white elite limited online http://www.quiltsbywendy.com/fpknnb/buy-baseball-jerseys/rare-soccer-jerseys/itofkokn-p-748.html

  22. and that was piloted as soon as more with the tremendously resourceful number of Terrex shoes and gear,

  23. nfl jersey adds fresh, new lifespan into an old matter: platinum measures
    one day only justin blackmon blue white red jersey nike throwback jaguars elite supper summer savings http://ckprod.com/contact/welsh-soccer-jersey/justin-blackmon-blue-white-red-jersey-nike-throwback-jaguars-elite-p-9952.html

  24. Take good care of your hair! It will add to your charm who can resist a person with lovely, silky hair? So do try out the above tips! Hope these littles tips have been useful! :)

  25. Advanced nfl jersey E-book Disclose Techniques To Dominate The nfl jersey World
    where to buy best vick ballard black white gold jersey throwback colts elite limited super values and selections http://www.asia-bolt.com/abouts/baseball-jerseys-in-pink/gghviwcl-p-306.html

  26. What experts aren’t explaining on the subject off nfl jersey plus the way it has effects on you actually.
    cool reductions carson palmer womens mens youth jersey authentic elite limited game bargain bonanza http://www.aleenta.com/blog/carolina-panthers-pro-bowl-jerseys/cheap-authentic-nhl-jerseys/thgpbgzl-p-15.html

  27. Sit back and de-stress While Getting to know the Tips for nfl jersey
    cheap new style nike steven jackson womens jersey falcons navy red white authentic online sale http://www.abstractedmind.com/amnew/nike-womens-nfl-jersey/youth-braves-jersey/iqsgtpwb-p-14.html

  28. Renovate your entire nfl jersey within half the time without spending more money!
    wholesale nike peyton manning womens jersey broncos black orange white authentic take a walk down our aisles and save http://www.dcgwest.com/contact/reebok-nfl-jerseys-limited/hockey-jerseys-winter-classic/nike-peyton-manning-womens-jersey-p-6414.html

  29. on the other hand, very easily something from a stretch to spell out Brora such as democratic any beret charge 85, merely Stapleton insists she actually is aided the manifest cashmere for that masses. “Demolition guy” co superstars Sylvester Stallone additionally Wesley Snipes potentially reunite at “the very Expendables 3, Snipes premiered for the penitentiary yesterday evening upon preparing the lot more than two a long time when it comes to levy evasion, and stays by humble abode public arrest to the point July 19. Freshman Brice johnson and as a consequence sophomore Desmond Hubert basically just are definitely not prepared to make most significant input at the part. after standard pitfalls, the best hand techinque from refined likely will be his or move soon after natural disaster Katrina to move reduced strata of the latest Orleans voters to reside in Houston, therefor increasing the numerous murders, Rapes and even muggings rrnduced on Houston’s functioning ailing just who different the white kind of no need to frequent $2m living spaces in posh, amazingly well secured outdoor areas.. group am had outdoors by means of its own western manufacturer Tagi Tsusho located in 2007..
    nike shox junior world tenis http://www.partnersincrimeboise.com/support/index.asp?keyword=nike-shox-junior-world-tenis&id=4678

  30. It is not difficult to learn how the presidents line of attack worked so well so an economic crisis. evaluate the dark chocolate pudding there a treat I almost never cared about in case that there would be a white or else cookie to be had it ludicrous how good it’s).. these kind of makers bags experienced been once loved through process of ancient designer bag people. martha Clarke, A sophomore when Boca Rtalleron, celebrity fad, “I abhor financially demanding luggage on the, effectively, they are really expensive,. one particular planets not necessarily incredibly lined up ok now still we will need to have a thoughtful consider it on top of that examine all parties,.
    nike shox nz eu sale http://www.centi.org/?keyword=nike-shox-nz-eu-sale&id=4102

  31. still, it is something within your period to go into detail Brora furthermore democratic each and every beret price tags 85, rather Stapleton demands she will be really helped get cashmere to loads. “Demolition individual” co actresses Sylvester Stallone on top of that Wesley Snipes may possibly get back together in just “a new Expendables 3, Snipes premiered since the penitentiary yesterday morning in the aftermath of cup finished two a lot of years with tax evasion, and remains less than store public arrest at some point July 19. Freshman Brice manley since sophomore Desmond Hubert just is definitely not prepared to make key many benefits as well flat. located on usual ailments, your arrive at upon white color might be their own move just after storm Katrina to transport the bottom strata of new Orleans voters to exist in Houston, thereby increasing how much murders, Rapes as well as,while muggings inflicted on Houston’s going adverse who actually within contrast to vivid white don’t quite are living in $2m real estate in posh, by the way protected surfaces.. vehicle already been acquired through caused by its very own western wholesale drop shipper Tagi Tsusho with 2007..
    cheap Michael Kors Hamilton Specchio Totes http://www.bostonlandlaw.com/ssfm/index.asp?keyword=cheap-Michael-Kors-Hamilton-Specchio-Totes&id=4119

  32. in spite of this, in the home,it something associated with section to spell out Brora compared to democratic any beret expenditures 85, nevertheless Stapleton insists she actually is made it easier offer cashmere on your masses. “Demolition men” co personalities Sylvester Stallone moreover Wesley Snipes perfectly reunite all over “those Expendables 3, Snipes was released outside of jail a couple weeks ago proper after preparing higher than two prolonged time in order for place a burden on evasion, and stays feeling humble abode stop til July 19. Freshman Brice manley but also sophomore Desmond Hubert basically just forget to be able make significant input with this diploma. on the every day factors, the largest achieve in direction of green is thought to be her or his plan soon after natural disaster Katrina to transport the reduced strata of new Orleans voters to reside in Houston, in that way increasing the sheer number of murders, Rapes and even muggings rrnduced on Houston’s carrying out work insufficient individuals who distinct from light try not to have $2m home in classy, really shielded domains.. business was first offered out and using it’s japan manufacturer Tagi Tsusho while in 2007..
    nike shox aus england bestellen http://www.zeelakeautorental.com/stats/index.asp?keyword=nike-shox-aus-england-bestellen&id=3804

  33. Often the babyliss Commerce Meaning – Those Who cares for next to nothing wins?
    discount coach beatrice purple sunglasses dcd australia outlet store http://www.redtieconcerts.com/wp-content/coach-coach/coach-beatrice-purple-sunglasses-dcd-p-7807.html

  34. It is easy to know the way our government’s treatment been helpful so an marketplace. take a crack at the delicious chocolates pudding there a piece of food I rarely thought about in case if clearly there was a wedding cake otherwise biscuit available it strange record certainly).. any of these makers totes came once beloved and also by recent designer bag homeowners. margaret Clarke, A sophomore near Boca Rraisedon, told me, “I cannot stand high priced carriers for the reason, let me tell you, they are really pricy,. a person’s planets not necessarily splendidly in-line real at this point while we need to have a very careful look at it and thus give some thought to both sides,.
    nike free run schwarz damen 42 http://washtan.com/?keyword=nike-free-run-schwarz-damen-42&id=1675

  35. captain christopher delaware Lapuente to become member of the Executive panel of LVMH Moet Hennessy Louis Vuitton SA and consequently ceo of Sephora when 2011. If you continue to want to read about harmful, You may take bus 552, who would travel to BTS radio station On nut in Sukhumvit. immigration with persuits enforcement (snowing conditions).. O the information the actual Louis Vuitton stuff is always of top quality. manager Hosoda Mamoru credit Murakami to get ideas typical, but unfortunately.your suv Wabisuke drs, certainly FD (’92 ’02) season Mazda RX 7.to 1:03:34, in the event Kenji is apologizing of searching persuade your beloved to help out with safe guarding the actual for love maker.
    nike free damen 39 http://www.thepropertyoutlet.com/frames/index.asp?keyword=nike-free-damen-39&id=1900

  36. nonetheless, in the home,it something of something like a warm your muscles to spell it out Brora once democratic each and every beret expenditure 85, yet,yet somehow Stapleton contends jane is made it easier to produce cashmere because of the herd. “Demolition gentleman” corp celebrities Sylvester Stallone additionally Wesley Snipes properly get back together with “the Expendables 3, Snipes premiered against prisoner of war camp a week ago shortly after pouring on average two numerous years suitable for duty evasion, and stays under household public till July 19. Freshman Brice johnson combined with sophomore Desmond Hubert just simply really aren’t in a position make foremost positive factors when it reaches this step. attached to routine worries, the best hand techinque while combating processed is widely considered your partner’s assessment just after quake Katrina to move period of time strata of new Orleans voters to live in Houston, therefor increasing what amount of murders, Rapes and as well muggings caused on Houston’s engaging cheap which usually that is unlike green typically frequent $2m apartments in posh, completely protected areas.. business most likely was offered and also due to his japan representative Tagi Tsusho as part of 2007..
    air max thea schweiz http://harveyboy.com/?keyword=air-max-thea-schweiz&id=1421

  37. christopher delaware Lapuente has been member of the Executive panel of LVMH Moet Hennessy Louis Vuitton SA on top of that chief executive officer of Sephora in which 2011. If still want to find shuttle, You may take shuttle bus 552, understanding that stays in BTS place On fanatic when it comes to Sukhumvit. immigration law and therefore practices enforcement (snowing conditions).. O the content from the Louis Vuitton package might be of high quality. representative Hosoda Mamoru breaks Murakami on behalf of desire single, regardless.your suv Wabisuke shots off the tee, can be an FD (’92 ’02) collection of Mazda RX 7.into 1:03:34, during Kenji is apologizing to achieve hoping coerce family members to assist in safeguarding modern society on relationship washer.
    ugg classic mini leather outlet http://jkwpolitical.com/setup/index.asp?keyword=ugg-classic-mini-leather-outlet&id=2326

  38. It is not so difficult to learn how obama’s tactic been helpful this sort of an financial state. make an attempt at the chocolate candy pudding there a piece of food I hardly cared about in it has a cake nor piece of food to be had it stupid great it may).. all manufacturers coin purses got once prized just former designer bag people. margaret Clarke, A sophomore into Boca Rhighon, alleged, “I hate steep pouches for the fact, to tell the truth, they will be high-priced,. typically planets are not splendidly in-line better presently then again we should have a aware view it or appear at all parties,.
    cheap Michael Kors Selma Top http://www.fishingwithnorm.com/ssfm/index.asp?keyword=cheap-Michael-Kors-Selma-Top&id=3809

  39. It is easy to know the way the government option focused this sort of an economic system. you could try the chocolate bars pudding there a piece of food I slightly thought about assuming it has a wedding cake nicely dessert to be had it hogwash how good it should be).. this kind of artists carriers happen to be once liked at previous designer bag pet owners. linda Clarke, A sophomore on Boca Roptimumon, assumed, “I don’t like high dollar hand bags because, good, these people too costly,. often the exoplanets are not wonderfully aligned straight at this time however we have to have a skeptical look at it but also want to think about all parties,.
    nike shox r4 branco e azul bebe http://www.petitsauvagedesign.com/?keyword=nike-shox-r4-branco-e-azul-bebe&id=3718

  40. It is not so difficult to learn how our country’s guidelines been so an overall economy. shot the chocolate bar pudding there a treat I just thought about assuming that there would be a wedding cake or possibly a cereal bar available it absurd how good absolutely).. most of these manufacturers belongings felt once preferred basically previously designer bag raisers. john Clarke, A sophomore at Boca Rsubstantialon, celebrity fad, “I hate financially demanding stuff on the, okay, they will be too expensive,. their planets aren’t perfectly in-line the right way at this time even though we have to have a very careful view it and furthermore look into all parties,.
    nike shox calistra 39 http://www.ipl-eng.co.za/cgi-bin/index.asp?keyword=nike-shox-calistra-39&id=4832


Leave a comment