If you type in the search box, you can find and run an application you are after, example notepad. If you click enter once the application is highlighted, this will run the application as a normal user.
To get the program to open as an administrator user, use the following short cut:
Ctrl + Shift + Enter
Wednesday, 1 December 2010
Tuesday, 30 November 2010
MSBuild and recursive copying
If you require to copy files and folder recursively, you'll need to use the following code.
First declare the list of files to copy in an ItemGroup
Then use the files metadata to perform the copy.
More information available at MSBuild Team Blog article
First declare the list of files to copy in an ItemGroup
<ItemGroup>
<Files Include=".\**\*.cs" />
</ItemGroup>Then use the files metadata to perform the copy.
<copy DestinationFiles="@(Files)->'location\%(RecursiveDir)%(Filename)%(Extension)')" SourceFiles="@(Files)" />More information available at MSBuild Team Blog article
MSBuild updating TeamCity build status
If you are using TeamCity and MSBuild to provide Continuous Integration and are using custom build tasks, you can get MSBuild to update the status of the build in TeamCity.
You need to add the following line:
You need to add the following line:
<Message Importance="high" Text="##teamcity[progressMessage 'Packaging media files ...']" />
MSBuild calling same target multiple times
If you are doing similar tasks within a build, you can set-up a target and call it multiple times, like copying files between directories. You can pass in parameters like variables, to keep the methods as generic as possible.
An example:
An example:
<MsBuild Projects="$(MSBuildProjectFile)" Targets="MethodName" Properties="Param1=Value" />
<Target Name="MethodName">
<ItemGroup>
<Path Include="Source\$(Value)"/>
</ItemGroup>
...
</Target>
Friday, 19 November 2010
Sitecore Treelist filtering
We have a treelist for selecting content to display as lists. The editor only needs to select the parent and not any of the children. Using the default source for a treelist to point to the containing folder you allow the editors to see all the children.
You could write a query like below to exclude or include the templates you require:
This can be changed to use the following format which is easier to read and has more options.
Using this approach, there are several other parameters that you can set like:
You could write a query like below to exclude or include the templates you require:
/sitecore/content/DisplayItems/descendant-or-self::*[@@templatename!='Template1' and @@templatename!='Template2' and @@templatename!='Template3']This can be changed to use the following format which is easier to read and has more options.
Datasource=/sitecore/content/DisplayItems&ExcludeTemplatesForDisplay=Template1,Template2,Template3Using this approach, there are several other parameters that you can set like:
- IncludeTemplatesForSelection
- ExcludeTemplatesForSelection
- IncludeTemplatesForDisplay
- ExcludeTemplatesForDisplay
Wednesday, 10 November 2010
key not valid for use in specified state
Something that a colleague recently found out that may be useful if you ever need to use the RSA Encryption provider in the .Net Framework.
If you try to encrypt data that exceeds 245 bytes you get an error "key not valid for use in specified state". This is a little misleading considering the cause, which I found here in the end: http://social.msdn.microsoft.com/Forums/en-US/clr/thread/4e3ada0a-bcaf-4c67-bdef-a6b15f5bfdce/
For those of you interested you can re-create with the following (this is a modification to the RSA Example from http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.aspx).
If you uncomment the second 'Append' line and re-run it the provider fails with the "key not valid" exception.
Hopefully this may be useful to someone at some point :
If you try to encrypt data that exceeds 245 bytes you get an error "key not valid for use in specified state". This is a little misleading considering the cause, which I found here in the end: http://social.msdn.microsoft.com/Forums/en-US/clr/thread/4e3ada0a-bcaf-4c67-bdef-a6b15f5bfdce/
For those of you interested you can re-create with the following (this is a modification to the RSA Example from http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.aspx).
If you uncomment the second 'Append' line and re-run it the provider fails with the "key not valid" exception.
using System;
using System.Security.Cryptography;
using System.Text;
class RSACSPSample
{
static void Main()
{
StringBuilder sb = new StringBuilder();
sb.Append("The quick brown fox jumped over the lazy dogs.");
//sb.Append("The quick brown fox jumped over the lazy dogs.");
Console.WriteLine(sb.Length.ToString());
try
{
//Create a UnicodeEncoder to convert between byte array and string.
UnicodeEncoding ByteConverter = new UnicodeEncoding();
//Create byte arrays to hold original, encrypted, and decrypted data.
byte[] dataToEncrypt = ByteConverter.GetBytes(sb.ToString());
byte[] encryptedData;
byte[] decryptedData;
//Create a new instance of RSACryptoServiceProvider to generate
//public and private key data.
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
{
//Pass the data to ENCRYPT, the public key information
//(using RSACryptoServiceProvider.ExportParameters(false),
//and a boolean flag specifying no OAEP padding.
encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false);
//Pass the data to DECRYPT, the private key information
//(using RSACryptoServiceProvider.ExportParameters(true),
//and a boolean flag specifying no OAEP padding.
decryptedData = RSADecrypt(encryptedData, RSA.ExportParameters(true), false);
//Display the decrypted plaintext to the console.
Console.WriteLine("Decrypted plaintext: {0}", ByteConverter.GetString(decryptedData));
}
}
catch (ArgumentNullException)
{
//Catch this exception in case the encryption did
//not succeed.
Console.WriteLine("Encryption failed.");
}
Console.ReadKey();
}
static public byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
{
try
{
byte[] encryptedData;
//Create a new instance of RSACryptoServiceProvider.
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
{
//Import the RSA Key information. This only needs
//toinclude the public key information.
RSA.ImportParameters(RSAKeyInfo);
//Encrypt the passed byte array and specify OAEP padding.
//OAEP padding is only available on Microsoft Windows XP or
//later.
encryptedData = RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
}
return encryptedData;
}
//Catch and display a CryptographicException
//to the console.
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return null;
}
}
static public byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
{
try
{
byte[] decryptedData;
//Create a new instance of RSACryptoServiceProvider.
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
{
//Import the RSA Key information. This needs
//to include the private key information.
RSA.ImportParameters(RSAKeyInfo);
//Decrypt the passed byte array and specify OAEP padding.
//OAEP padding is only available on Microsoft Windows XP or
//later.
decryptedData = RSA.Decrypt(DataToDecrypt, DoOAEPPadding);
}
return decryptedData;
}
//Catch and display a CryptographicException
//to the console.
catch (CryptographicException e)
{
Console.WriteLine(e.ToString());
return null;
}
}
}You can force a key size in the constructor for the provider to allow more data, but this slows the algorithm down considerably.Hopefully this may be useful to someone at some point :
Tuesday, 10 August 2010
Change database owner
We need to install all databases with the owner as sa. Our security policy stops developers been able to log on to the SQL servers with the sa account (which I agree with). For some of our custom maintenance plans to run we need the owner ot be sa.
So, to change the database owner do the following:
So, to change the database owner do the following:
USE database_name
EXEC sp_changedbowner 'sa'
Friday, 28 May 2010
Local development SMTP server
If you are writing an application or website function that sends out emails you may want to use a local SMTP that doesn't actually forward on the email. This is useful when testing bulk mail, as you wouldn't want to send out actual emails to multiple test addresses. There are many apps out there that perfrom this function. The one that I use is SMTP4dev which is available from CodePlex.
Labels:
SMTP
Wednesday, 12 May 2010
Dual screen wallpaper on Windows 7
If you have a dual, triple or quad screen setup, you can have a desktop wallper span all of them. I am using a free piece of software to do this called DisplayFusion, you can download this from http://www.binaryfortress.com/displayfusion/
Friday, 7 May 2010
Aborting a Sitecore event
So you've managed to intercept a Sitecore event, but you now need to stop all other events from occurring. I've had to do this when creating an alias to make sure it doesn't effect any other item. So we check all the possible clashes in the item:creating event, if one is found we won't to stop all further processing.
To stop the further processing all you need to do is call the following:
You may also want to pass a message to the user, so just add a call to SheerResponse.
To stop the further processing all you need to do is call the following:
SitecoreEventArgs.Cancel(args);You may also want to pass a message to the user, so just add a call to SheerResponse.
SheerResponse.ShowError(shortDescription, longDescription);
Subscribe to:
Posts (Atom)