Problems with security policy (SetSecurity.cs)

  • Thread starter Paulo Braz Figueiredo
  • Start date
P

Paulo Braz Figueiredo

Hy,
I developed an Outlook 2003 add-in. Now I need an installer to deploy de
add-in. I’m using a Setup project but I’m having some security policy
problems.
I added to my project Visual Studio Tools For Office Sample code
(SetSecurity.cs):

namespace CustomActions
{
[RunInstaller(true)]

[System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
public sealed partial class SetSecurity : Installer
{
public SetSecurity()
{
InitializeComponent();
}

public override void Install(System.Collections.IDictionary
stateSaver)
{
// Call the base implementation.
base.Install(stateSaver);

string allUsersString = this.Context.Parameters["allUsers"];
string solutionCodeGroupName =
this.Context.Parameters["solutionCodeGroupName"];
string solutionCodeGroupDescription =
this.Context.Parameters["solutionCodeGroupDescription"];
string targetDir = this.Context.Parameters["targetDir"];
string assemblyName = this.Context.Parameters["assemblyName"];
string assemblyCodeGroupName =
this.Context.Parameters["assemblyCodeGroupName"];
string assemblyCodeGroupDescription =
this.Context.Parameters["assemblyCodeGroupDescription"];

// Note that a code group with solutionCodeGroupName name is
created in the
// Install method and removed in the Rollback and Uninstall
methods.
// The solutionCodeGroupName must be a unique name to ensure
that the
// correct code group is removed during Rollback and Uninstall.

if (String.IsNullOrEmpty(solutionCodeGroupName))
throw new InstallException("Cannot set the security policy.
The specified solution code group name is not valid.");
if (String.IsNullOrEmpty(solutionCodeGroupDescription))
throw new InstallException("Cannot set the security policy.
The specified solution code group description is not valid.");
if (String.IsNullOrEmpty(targetDir))
throw new InstallException("Cannot set the security policy.
The specified target directory is not valid.");
if (String.IsNullOrEmpty(assemblyName))
throw new InstallException("Cannot set the security policy.
The specified assembly name is not valid.");
if (String.IsNullOrEmpty(assemblyCodeGroupName))
throw new InstallException("Cannot set the security policy.
The specified assembly code group name is not valid.");
if (String.IsNullOrEmpty(assemblyCodeGroupDescription))
throw new InstallException("Cannot set the security policy.
The specified assembly code group description is not valid.");
if (stateSaver == null)
throw new ArgumentNullException("stateSaver");

try
{
bool allUsers = String.Equals(allUsersString, "1");
string assemblyPath = Path.Combine(targetDir, assemblyName);

// Note that Install method may be invoked during Repair
mode and the code group
// may already exist.
// To prevent adding of another code group, remove the code
group if it exists.
try
{
// The solutionCodeGroupName must be a unique name;
otherwise, the method might delete wrong code group.

CaspolSecurityPolicyCreator.RemoveSecurityPolicy(allUsers,
solutionCodeGroupName);
}
catch {}

CaspolSecurityPolicyCreator.AddSecurityPolicy(
allUsers,
solutionCodeGroupName,
solutionCodeGroupDescription,
assemblyPath,
assemblyCodeGroupName,
assemblyCodeGroupDescription);
stateSaver.Add("allUsers", allUsers);

}
catch (Exception ex)
{
throw new InstallException("Cannot set the security
policy.", ex);
}
}

public override void Rollback(System.Collections.IDictionary
savedState)
{
// Call the base implementation.
base.Rollback(savedState);

// Check whether the "allUsers" property is saved.
// If it is not set, the Install method did not set the security
policy.
if ((savedState == null) || (savedState["allUsers"] == null))
return;

// The solutionCodeGroupName must be a unique name; otherwise,
the method might delete wrong code group.
string solutionCodeGroupName =
this.Context.Parameters["solutionCodeGroupName"];
if (String.IsNullOrEmpty(solutionCodeGroupName))
throw new InstallException("Cannot remove the security
policy. The specified solution code group name is not valid.");

try
{
bool allUsers = (bool) savedState["allUsers"];
CaspolSecurityPolicyCreator.RemoveSecurityPolicy(allUsers,
solutionCodeGroupName);
}
catch (Exception ex)
{
throw new InstallException("Cannot remove the security
policy.", ex);
}
}


public override void Uninstall(System.Collections.IDictionary
savedState)
{
// Call the base implementation.
base.Uninstall(savedState);

// Check whether the "allUsers" property is saved.
// If it is not set, the Install method did not set the security
policy.
if ((savedState == null) || (savedState["allUsers"] == null))
return;

// The solutionCodeGroupName must be a unique name; otherwise,
the method might delete wrong code group.
string solutionCodeGroupName =
this.Context.Parameters["solutionCodeGroupName"];
if (String.IsNullOrEmpty(solutionCodeGroupName))
throw new InstallException("Cannot remove the security
policy. The specified solution code group name is not valid.");

try
{
bool allUsers = (bool)savedState["allUsers"];
CaspolSecurityPolicyCreator.RemoveSecurityPolicy(allUsers,
solutionCodeGroupName);
}
catch (Exception ex)
{
// Note that throwing an exception might stop the uninstall
process.
// To inform the user and stop the uninstall process, throw
an exception.
// To continue the uninstall, do not throw the exception.
throw new InstallException("Cannot remove the security
policy.", ex);
}
}
}
}

Now I got a "Cannot set the security policy. The specified solution code
group name is not valid." error message. I don’t know how to solve this. Any
body have ideas on this?

Thanks in advance.

Paulo Braz Figueiredo.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top