Category Archives: microsoft

SharePoint security update stops SharePoint working

This morning I noticed that my test SharePoint 2010 installation was not working. Browsing to the site got me HTTP Error 503. The service is unavailable.

The problem seems to be related to the update KB2553365 which I noticed had been installed last night, following an initial failure.

image

Note this point in the description of the update:

After you install this security update on all SharePoint servers, you will have to run the PSconfig tool to complete the installation. For more information about how to use the PSconfig tool, visit the following TechNet webpage:

PSconfig command-line reference (SharePoint Foundation 2010)

In other words, if your server is set up update automatically, this update breaks SharePoint until you manually run the PSconfig utility which applies SharePoint updates.

Further, there is no automatic notification of this requirement. You have to figure it out.

SharePoint administrators know about PSconfig, but companies with Small Business Server or other small-scale environments are not always familiar with the problem.

Worse still, in my case PSconfig has not fixed it. I am restoring last night’s backup.

Macro virus reborn: ACAD/Medre.A steals drawings using AutoCAD AutoLISP

Remember the Concept virus? Someone wondered if you could make a self-replicating virus with a Microsoft Word macro. It worked; and the proof of concept soon became a real virus causing the usual mayhem and spoiling our clever VBA templates.

Microsoft locked down Office macros fairly effectively; but the idea lived on and has re-emerged as an AutoCAD virus which runs automatically when a drawing is opened. It is not quite the same, as in AutoCAD the code has to be in an external .lsp file, but you can have code in the S::STARTUP function run when a document loads, as explained in the documentation here. The malware relies on the fact that when drawings are emailed, users often archive an entire folder rather than sending a single file. This is how the virus spreads.

Most of the actual malicious code is not in AutoLISP, but in the more familiar form of VBScript files to which the code calls out. The malware then emails AutoCAD drawings to addresses in China – a rather crude mechanism for stealing data, but apparently somewhat effective since on investigation the target mailboxes were found overflowing with messages.

The threat is serious though. Much intellectual property and many future product plans are contained in AutoCAD drawings.

Security vendor ESET’s white paper [PDF] describes the attack in detail.

According to ESET, the combined efforts of Autodesk, Chinese ISP Tencent, and the Chinese National Computer Virus Emergency Response Center have contained the virus for now. There is also a free clean-up utility here: http://download.eset.com/special/EACADMedreCleaner.exe.

Microsoft announces launch dates for Windows 8: software will be done early August

Microsoft’s Tami Reller has announced the launch dates for Windows 8, the company’s controversial new operating system which combines the familiar desktop with a new touch-based user interface and associated runtime. She was speaking at the Worldwide Partner Conference under way in Toronto.

image

The team is on track to complete the software in early August, a milestone known as RTM (Release to Manufacturing).

This means that the final version of Windows 8 will be available for download by developers and enterprises from August – just a couple of months from now.

PCs and tablets preloaded with Windows 8 will be in the shops from late October.

The appearance of Windows 8 hardware is more significant this time round than is usually the case. One reason is that most PCs currently on sale do not have touch screens; and even those that do will lack the range of sensors expected in Windows 8 tablets.

Even more significant is that the ARM build of Windows 8, called Windows RT, is only available with new hardware. This means it will not be generally available at all until the hardware appears in October.

Moving a database from on-premise SQL Server to SQL Azure: some hassle

I am impressed with the new Windows Azure platform, but when I moved a simple app from my local machine to Azure I had some hassle copying the SQL Server database.

The good news is that you can connect to SQL Azure using SQL Server Management studio. You need to do two things. First, check the server location and username. You should already know the password which you set when the database was created. You can get this information by going to the Azure portal, selecting the database, and clicking Show connection strings on the dashboard.

Second, open the SQL firewall for the IP number of your client. There is a link for this in the same connection string dialog.

Now you can connect in SQL Server Management Studio. However, you have limited access compared to what you get as an admin on your local SQL Server.

Here is the Tasks menu for an on-premise SQL Server database:

image

and here it is for a SQL Server Azure database:

image

Still, you can start Export Data or Copy Database from your on-premise connection and enter the Azure connection as the target. However, you should create the destination table first, since the Export Data wizard will not recreate indexes. In fact, SQL Azure will reject data imported into a table without at least one clustered index.

I tried to script a table definition and then run it against the SQL Azure database. You can generate the script from the Script Table as menu.

image

However even the simplest table will fail. I got:

Msg 40514, Level 16, State 1, Line 2
‘Filegroup reference and partitioning scheme’ is not supported in this version of SQL Server.

when attempting to run the script on SQL Azure.

The explanation is here.

Windows Azure SQL Database supports a subset of the Transact-SQL language. You must modify the generated script to only include supported Transact-SQL statements before you deploy the database to SQL Database.

Fortunately there is an easier way. Right-click the table and choose Generate Scripts. In the wizard, click the Advanced button for Set Scripting Options.

image

Find Script for the database engine type, and choose SQL Azure:

image

You may want to change some of the other options too. This generates a SQL script that works with SQL Azure. Then I was able to use the Export Data wizard using the new table as the target.  If you use Identity columns, don’t forget Enable identity insert in Edit Mappings.

image

Farewell to Microsoft Small Business Server

Microsoft has announced pricing and licensing for Windows Server 2012. A dry topic perhaps; but one which confirms the end of a product with which I am perhaps too familiar: Small Business Server. It is spelt out in the FAQ:

Q33. Will there be a next version of Windows Small Business Server 2011 Standard?

No. Windows Small Business Server 2011 Standard, which includes Exchange Server and Windows server component products, will be the final such Windows Server offering. This change is in response to small business market trends and behavior. The small business computing trends are moving in the direction of cloud computing for applications and services such as email, online back-up and line-of-business tools.

The next question confirms that there will not be a new edition of Small Business Server 2011 Premium either. The official replacement is Windows Server 2012 Essentials, which is in effect the next version of Small Business Server Essentials. This handles local Active Directory, file sharing, local applications, and a connector to Office 365. However there is a 25 user account limit, whereas SBS standard supported up to 75 users, so there will be some businesses who are now forced to choose between moving to Windows Server Standard, or ditching the local server completely (which is often impractical).

image

Microsoft is pinning the reason on cloud computing, which makes some sense. Now and again I am asked by small businesses what sort of technology they should adopt; and my answer in general is to point them at either Microsoft Office 365 or Google Apps.

It is not quite clear-cut. A Small Business Server can theoretically work out cheaper, if you presume that it will not require any external maintenance. That is rarely the case though, and for most people the cloud-hosted option will be both cheaper and less troublesome.

What if you do need on-premise Active Directory, Exchange and SharePoint, which are the core components of SBS? Technically, there are in my opinion better ways to do this than with SBS. While SBS has always been excellent value for money, it is over-complex because it crams onto one box applications which are designed to run on separate boxes. It does work, but if anything goes wrong it is actually harder to troubleshoot than when you have separate servers. I prefer to see one Hyper-V box with separate Virtual Machines (VMs) for each major function, than SBS running on bare metal. VMs are also more flexible, and easier to restore if the hardware breaks.

Farewell then to SBS. I will remember it with some affection though. Think back to the nineties, when most email was POP3, and most internet was dial-up. People had problems like losing emails, because they had been downloaded to a desktop PC and they were out and about with a laptop. Moving to Microsoft Exchange, for which Outlook is the client, was bliss by comparison. Email synchronised itself to all your PCs, you could work offline, and Outlook for all its faults became a one-stop application for calendar, contacts and messages.

The beauty of SBS was that you could get Exchange along with the benefits of a Windows domain – one central directory of users and the ability to assign permissions to file shares – at a price that was more than reasonable.

I also think of SBS as a reliable product, when correctly installed. When it does go wrong it is often due to users trying to do stuff that does not quite work, or other applications which get installed on the same box, or hardware faults which users have attempted to fix by messing around with Windows, or anti-virus software misbehaving (Sophos! Confess!).

Microsoft is doing the right thing though. The SBS bundle makes little sense today, and if you do still need it, you can stick with the 2011 edition for a few years yet.

aQuantive may be Microsoft’s biggest acquisition failure. Have there been good ones? A look back.

Today’s news that Microsoft  is writing off $6.2 billion from the useless acquisition of aQuantive in August 2007 gives me pause for thought.

How bad is this company at acquisitions? Particularly those under CEO Steve Ballmer’s watch. He became CEO in January 2000.

image

Microsoft acquired Danger in February 2008 for $500M. Small relative to the aQuantive acquisition, but how much further money did the company burn transforming Danger from an excellent cloud and mobile company to the group that came up with Kin, the phone withdrawn from the market after just two months on sale? Not to mention the downtime and threatened loss of data suffered by Danger’s online service under Microsoft’s stewardship.

Microsoft attempted to buy Yahoo for $44.6bn in 2008. Yahoo’s executives declined, a move that was (very) bad for Yahoo shareholders but quite possibly right in a business sense; it would not have been a good fit.

Microsoft acquired Groove Networks complete with Notes inventor Ray Ozzie in March 2005. I put this in the disaster category. Groove went nowhere at Microsoft. Ozzie became Chief Software Architect and talked of internet vision but did not deliver. The wretched SharePoint Workspace is apparently based on Groove.

What about the good ones? My view is that Microsoft paid too much for Skype at $8.5 billion but at least it acquired a large number of users and has some chance of enhancing its mobile offerings with Skype integration.

Microsoft acquired Bungie in 2000 and given the success of Halo (without which, maybe, the whole Xbox project might have faltered) we have to count that a success, even though Bungie was spun off back to independence in 2007.

Other notables include Great Plains in December 2000 (now morphed into Dynamics ERP); Connectix in February 2003 which got Microsoft started in virtualization; and Opalis in December 2009 whose software now plays a key role in Microsoft’s System Center 2012 private cloud software.

Winternals in July 2006 was a great acquisition. Microsoft acquired some indispensable Windows troubleshooting tools, and also Mark Russinovich and Bryce Cogwell, able people who I suspect contributed to the transformation of Windows Vista into Windows 7, and in the case of Russinovich, to the technology in Windows Azure which now seems reborn as an excellent cloud platform.

You can see all Microsoft’s completed acquisitions here.

(If the company would like to acquire itwriting.com for a few billion I am willing to talk.)

MySQL on Windows Azure is expensive and provided by a third-party, spoils web site offer

I have been impressed by the changes in the June release of Windows Azure, available through a sparkling new HTML-based portal that lets you create new virtual machines and web sites with a few clicks or taps. One of the new features is multi-tenant web sites, starting from free and scaling up to multiple load-balanced instances. I even wondered about moving this blog, which is on WordPress, to run on an Azure web site.

When you create a web site on Azure, you can choose between a free MySQL database or a paid-for SQL Server database. At least, that is what was announced, and it is kind-of true. However, if you choose a MySQL database, a message about agreeing to terms from third-party ClearDB pops up. Even your subscription details will be passed to ClearDB.

image

You click the link, and discover that the free MySQL offer is not generous. In fact, it is limited to a tiny 20MB, making is useless for most applications. It also has, according to ClearDB, low performance.

image

If your database may grow to more than 1GB you need ClearDB’s Saturn offer, at $49.99 per month.

This has killed my interest in running this blog on Azure, at least via this route. I am not familiar with ClearDB, but for all I know it is a fine company. Nevertheless, if I am betting on Windows Azure, I would rather not have to bet also on an unfamiliar third-party. I also note that many ISPs offer MySQL databases with few restrictions and better terms. Take UK ISP ICUK, for example, which I use on occasion. For £3.00 per month you can get Linux web hosting with up to 10 MySQL databases. They may not have all the features of ClearDB, but as far as I am aware (don’t take my word for it) they are on a fault-tolerant cluster and backed up nightly.

As I understood it, Microsoft’s goal with the multi-tenanted web sites is to provide a quick solution for test and development, that can scale to a serious web site. Maybe enterprises will not blink, but a $49.99 monthly plan for the database takes it out of the realm of quick and cheap test and development from my perspective.

It is also unfortunate that the Azure web site gallery does not provide an option to use SQL Server for some applications in its quick-create Gallery. These include WordPress and Drupal. I agree that these applications probably work best with MySQL, but you can configure them to use SQL Server.

There are other ways to bypass ClearDB. You could set up a plain PHP web site and configure it to run WordPress on SQL Server, for example. You could also use a Linux VM, even a Small Instance, with 1 virtual CPU and 1.75GB RAM, and put MySQL on there. Thanks to Azure’s fabric, it will have some resilience: all storage is, as I understand it, in triplicate.

In the end I guess this is not unexpected. Microsoft is a Windows company and you can understand why it wants to get someone else to manage MySQL; and also why it does not wish to undercut SQL Server with too generous an offer for MySQL.

Even so, the 20MB limit is a disappointment and makes the Azure free web sites less interesting.

Microsoft’s Scott Guthrie on what has happened to Silverlight

I spoke to Microsoft’s Scott Guthrie last week, during his trip to the UK for a couple of Windows Azure events in Cambridge and London.

Guthrie is now Corporate VP Windows Azure Application Platform, a job he took up in May 2011. Before that he worked on .NET technologies including Silverlight, and I asked if he had any reflections on the subject. He was scrupulously tactful.

“In terms of looking at our XAML stack right now, if you look at some of the announcements we’ve made in terms of Windows 8, Metro, Surface, tablets and desktops, and Windows Phone, XAML is alive and well and being used for more things than ever.

“Silverlight 5 shipped after I moved on to Azure. We did an update to Silverlight 5 about a month ago. For XAML developers, and developers using Silverlight or WPF XAML technologies, there is a long roadmap ahead.”

He seemed to me to be saying that even if Silverlight is dead (nobody expects a Silverlight 6), XAML lives on.

I observed that in the new (and much improved) Windows Azure admin portal, the Silverlight UI has gone, replaced by an HTML 5 user interface.

“It’s actually HTML, it’s not HTML 5. It works with non HTML 5 browsers as well.“ he said. “That was less of a technology statement, it was more that, historically Azure had 5 or 6 admin tools that were fairly disjoint. One of the decisions we made as part of the new Azure that we’re building was, let’s have a single admin tool framework that connected everything. We decided to do it with HTML, partly because we did want to get reach on tablets like iPads and Android devices.

“It was less a technology statement, it was more that we wanted a single admin tool, and we decided to go with an HTML-based approach. We still use Silverlight for some of our admin experiences like database management tools, and for streaming and other capabilities.”

It is true that Silverlight remains in the Azure database design tool, if you use the portal. It is also used extensively in System Center 2012 – yes, I have actually installed it – and in Windows InTune.

It is as if, back in 2009 and early 2010, the memo went out: use Silverlight for everything. Then, later in 2010, the memo went out: use HTML for everything; but too late for the current generation of server admin products.

Microsoft has announced that Visual Studio LightSwitch, which generates Silverlight applications, is being revised to offer HTML applications as well. I expect this process of Silverlight removal and de-emphasis to continue over the next couple of years. Note that Microsoft’s own Windows RT does not support Silverlight (as far as I am aware), nor does Windows 8 on the Metro side.

Windows Phone 8 and Windows 8: nearly converged

Microsoft has shared details of the forthcoming Windows Phone 8 operating system, which is set to be available on devices before the end of 2012.

The improvements are fundamental, and it seems that Microsoft has finally created a mobile platform that has what it takes, technically, to compete in the modern smartphone market. Winning share from competitors is another thing of course; Nokia’s hoped-for third ecosystem is still tiny relative to Apple iOS or Google Android.

It starts with a change in the core operating system, from Windows CE to Windows 8. The two now share the same kernel, and APIs including Graphics, Audio, Media, File System, Networking, Input, Commerce, Base Types and Sensors. The .NET Framework is also the same. The browser will be Internet Explorer 10.

image

Silverlight was not mentioned, nor was XNA, though we were told that Windows Phone 7.x apps will run on Windows Phone 8.

The change does enable multi-core support at last. Screen resolution can now go up to 1280 x 768, ready for high-definition displays. There is also support for MicroSD storage, a feature which should have been in the first release.

What about Windows RT, the runtime for Metro-style apps in Windows 8? Here is the significant slide from yesterday’s presentation:

devchoices

This looks similar to Windows RT, which also supports three development models: XAML and .NET, native C/C++ code, and HTML5. It is not quite the same though. One thing I did not hear mentioned was contracts, the communication and file sharing system built into Windows 8, though we were promised “sharing under user control”. Nor did we hear about language “projections”, the layer that lets different languages in Windows 8 call the same Windows Runtime APIs. My guess at the moment is that Windows Phone 8 does not include the Windows Runtime, though it does have much in common with it. The further guess is that the full Windows Runtime will come in Windows Phone 9.

In other words, it seems that Windows Phone 8 will not run apps coded for Windows 8, though we were told that if you code to the XAML and .NET model for apps, and the native code model for games, few changes will be needed. XNA developers should consider a change of direction.

Support for C/C++ is a key feature and one that in my view should have been in the first Windows Phone release. One of the things it enables is official support for SQLite, the cross-platform database engine also found in Mac OS X and numerous other platforms. A good day for SQLite, which pleases me as I am a fan.

There will also be C/C++ gaming libraries coming to Windows Phone 8, including Havoc:

havoc

What else is new? Users will like the new Start screen, which unlike the whole of Windows Phone 8 is also coming to existing devices, which will get a half-way upgrade called Windows Phone 7.8 (7 and 8, geddit?). The innovation in the new Start screen is that any tile can be sized by the user to any of the supported sizes. The smallest size allows four tiles across, so you can make your Windows Phone look more like Android or iOS if you so choose.

newstart2

What else? Microsoft is not announcing “end-user features” yet, but did promise Nokia offline maps plus turn by turn directions; digital wallet which can be paired with a secure SIM for NFC (near field communications) payment, and deep support for Skype and VOIP so they “feel like any other call”. Apparently operators will love the way the wallet is implemented, because unlike Android it is hooked to the SIM, but I doubt they will be so keen on Skype.

There is an improved speech engine which duly failed to recognise speech input correctly in the first demo, though it worked after that.

Finally, Microsoft is now talking Enterprise for Windows Phone. There will be bitlocker encryption and enterprise app deployment without Windows store, as well as device management. Think full System Center 2012 integration.

Conclusion? There is disappointment that existing Windows Phone 7 devices are not fully upgradeable, but this is hardly surprising given the changed core. As a platform it is greatly improved, though I would like to see full WinRT included. Despite its poor start, you cannot dismiss this mobile OS as Microsoft continues to use its financial muscle to try and try again.

If it succeeds, will it be too late for Nokia? Maybe, though my hunch is that Microsoft will do what it takes to keep its key mobile partner alive.

Wrestling with SharePoint and Office 365: code to bulk move documents

I have mixed feelings about SharePoint, Microsoft’s flexible but infuriating collaboration platform. It makes difficult things easy and easy things difficult, or something like that. Today’s story is an example, and may also be of interest if you are wondering how to write code that manipulates documents in SharePoint as found in Office 365.

The problem started when some contacts of mine who use Office 365 could not open a folder in Windows Explorer. They received a permission error along with the famous invitation to “Contact your network administrator to request access.”

image

The folder in question is actually a SharePoint folder which accesses Office 365 through WebDAV. I took a look, and found that, whatever the problem was, it had nothing to do with permissions. I also observed that there was no problem accessing the folder through the web browser; but like many users, these people prefer to use Explorer.

Next, I started moving files out of the troublesome folder into another one. I began to suspect that some rogue document was causing the error. This suspicion proved correct, but it was not easy to track down. The problem: the SharePoint web user interface does not provide any bulk copy or move option. If you want to move a bunch of documents, the recommended way is to use Windows Explorer, the exact feature that in this instance was not working.

Moving documents one by one through a laborious Web UI is no fun, so I then had the bright idea of writing some code to move the documents. This means taking a dive into the labyrinthine SharePoint API.

I was surprised how hard this is. Here is how I got started:

First, I downloaded the SharePoint SDK and run the setup. I chose to install only the Foundation help and samples.

Next, I created a new Windows Forms project in Visual Studio 2010. Note you must set the project to target the full .NET Framework 4.0, not just the Client profile

After that, I had to copy two DLLs from my own SharePoint 2010 server. These are in:

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI

I am surprised they are not included with the SDK.

After that, I looked for some code samples for the SharePoint Client Object Model. You can find this described here or consult the reference here. It is a capable API, but you soon realise why there is plenty of work for SharePoint specialists. ClientContext, CAML queries, FolderServerRelativeUrl: there is a lot to get your head around.

The first problem I had though was authentication. Office 365 uses claims-based authentication, whereas all the SharePoint API examples seem to assume you are on an intranet and already authenticated for your SharePoint server. Coding for claims-based authentication is a headache.

I tried code from here to authenticate against the Office 365 claims-based federation server, but with no success. It seems to be based on beta code and does not work now. I then read the official document on the subject here and downloaded the sample code. Here is what worked for me:

Add the ClaimsAuth project from the sample to my Windows Forms solution.

Modify this line in ClaimsWebAuth.cs:

Application.Run(DisplayLoginForm);

to this

DisplayLoginForm.ShowDialog();

the reason being that ClaimsAuth is designed for a console application.

Then I could run some basic Client Object Model code like this:

ClientContext cc = ClaimClientContext.GetAuthenticatedContext(url);

            if (cc != null)
            {
                cc.Load(cc.Web); 
                cc.ExecuteQuery(); 
                lbTest.Text = "Title: " + cc.Web.Title;
                cc.Dispose();
            }

All this does is to connect to the Office 365 SharePoint site at url and display its title – but if you can do that, you have got past the first hurdle.

Next I had to figure out how to move all the documents in one folder to another. Again, I found this tricky. I was able to list all the items in a library, which is the top-level folder for a collection of documents, but how do you list all the items in a subfolder? Something to do with CAML, it seems, also known as Collaborative Application Markup Language. Does anyone out there love CAML? I thought not. CAML queries are like SQL queries chopped up into XML elements.

Another characteristic of the Client Object Model is that you constantly have to call the Load and ExecuteQuery methods of your ClientContext object, otherwise you will get a PropertyOrFieldNotInitializedException. There is a good reason for this, as it reduces the amount of data passing over the wire, but it can also be perplexing.

Here is the code I ended up with, where “docs” is the top-level folder or library name,

if (cc != null)
            {
                cc.Load(cc.Web);
                cc.ExecuteQuery();
                var site = cc.Web;

                var lib = site.Lists.GetByTitle("docs");
               
                CamlQuery camlQuery = new CamlQuery();
                camlQuery.FolderServerRelativeUrl = @"/docs/path/to/sourcefolder";

                string camlQueryXml = "<View>" +
                    "<Query>" +
                      "<OrderBy>" +
                        "<FieldRef Name=’FileLeafRef’ Ascending=’True’ />" +
                      "</OrderBy>" +
                    "</Query>" +
                  "</View>";
 
                camlQuery.ViewXml = camlQueryXml;

                ListItemCollection lis = lib.GetItems(camlQuery);

                cc.Load(lis);

                cc.ExecuteQuery();
                ListItem FolderCF = null;
                foreach (ListItem li in lis)
                {

                    string sTitle = li.FieldValues["FileLeafRef"].ToString();

                  // you can inspect the title to see if you want to move the file,

                  //eg only those beginning with a letter in the first half of the alphabet

                    {
                        File thefile = li.File;

                        cc.Load(thefile);
                        cc.ExecuteQuery();

                        if (!li.File.ServerObjectIsNull.Value)
                        {
                            string dest = @"/docs/path/to/destfolder/" + thefile.Name;
                            thefile.MoveTo(dest, MoveOperations.Overwrite);
                            cc.ExecuteQuery();
                        }
                    }

                }

                cc.Dispose();
            }

Pretty simple? Maybe it is to a SharePoint guru; all I can say is that I did not find it intuitive.

Note that this is not intended as production code so if you borrow it please add exception handling etc. It was a quick hack to solve a problem.

The good news is that once I was able to move documents from folder to folder programmatically, I was able to troubleshoot the original problem. Mysteriously, there was one document which, if it was in a folder, caused the access denied error when opened with WebDAV. Once I isolated the document, I discovered that if I renamed it, the problem went away. Curiously, there are no special characters in the name, just letters and spaces, so this is something of a mystery.

Still, it was a useful exercise, especially since moving a batch of documents using the Client Object Model seems quicker than using Explorer and WebDAV.