/*
* Copyright (c) 2006, Brendan Grant (grantb@dahat.com)
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * All original and modified versions of this source code must include the
* above copyright notice, this list of conditions and the following
* disclaimer.
* * This code may not be used with or within any modules or code that is
* licensed in any way that that compels or requires users or modifiers
* to release their source code or changes as a requirement for
* the use, modification or distribution of binary, object or source code
* based on the licensed source code. (ex: Cannot be used with GPL code.)
* * The name of Brendan Grant may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY BRENDAN GRANT ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL BRENDAN GRANT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.Text;
namespace BrendanGrant.Helpers.FileAssociation
{
///
/// Provides more streamlined interface for associating a single or multiple extensions with a single program.
///
class AssociationManager
{
///
/// Determines of the list of extensions are associated with the specified program id.
///
/// Program id to check against.
/// String array of extensions to check against the program id.
/// String array of extensions that were not associated with the program id.
public string[] CheckAssociation(string progId, params string[] extensions)
{
List notAssociated = new List();
foreach (string s in extensions)
{
FileAssociationInfo fai = new FileAssociationInfo(s);
if (!fai.Exists || fai.ProgID != progId)
notAssociated.Add(s);
}
return notAssociated.ToArray();
}
///
/// Associates a single executable with a list of extensions.
///
/// Name of program id
/// Path to executable to start including arguments.
/// String array of extensions to associate with program id.
/// progId = "MyTextFile"
/// executablePath = "notepad.exe %1"
/// extensions = ".txt", ".text"
public void Associate(string progId, string executablePath, params string[] extensions )
{
foreach (string s in extensions)
{
FileAssociationInfo fai = new FileAssociationInfo(s);
if (!fai.Exists)
fai.Create(progId);
fai.ProgID = progId;
}
ProgramAssociationInfo pai = new ProgramAssociationInfo(progId);
if (!pai.Exists)
pai.Create();
pai.AddVerb(new ProgramVerb("open", executablePath));
}
///
/// Associates an already existing program id with a list of extensions.
///
/// The program id to associate extensions with.
/// String array of extensions to associate with program id.
public void Associate(string progId, params string[] extensions)
{
foreach (string s in extensions)
{
FileAssociationInfo fai = new FileAssociationInfo(s);
if (!fai.Exists)
fai.Create(progId);
fai.ProgID = progId;
}
}
}
}