C# 作为我的dll。如果我添加了一个基于URL的安全设置,我可以运行插件OK。我还没有解决PIA.msi和VSTO.msi的安装问题,但我认为我不需要解决,因为我的开发机器已经安装了它们。如果我没有在安装中包含这些,我的应用程序将不会运行。我不确定我还需要做什
C# 作为我的dll。如果我添加了一个基于URL的安全设置,我可以运行插件OK。我还没有解决PIA.msi和VSTO.msi的安装问题,但我认为我不需要解决,因为我的开发机器已经安装了它们。如果我没有在安装中包含这些,我的应用程序将不会运行。我不确定我还需要做什,c#,security,excel,installation,vsto,C#,Security,Excel,Installation,Vsto,作为我的dll。如果我添加了一个基于URL的安全设置,我可以运行插件OK。我还没有解决PIA.msi和VSTO.msi的安装问题,但我认为我不需要解决,因为我的开发机器已经安装了它们。如果我没有在安装中包含这些,我的应用程序将不会运行。我不确定我还需要做什么来安装这些。我确信我已经在我的开发环境之外做过几次了。你可以正常地安装PIA和VSTO程序集,你不需要专门设置这些程序集的安全性。我会这样做(首先关闭所有office应用程序):1。安装PIA 2。将VS3安装到运行时3。安装插件4。设置插件
作为我的dll。如果我添加了一个基于URL的安全设置,我可以运行插件OK。我还没有解决PIA.msi和VSTO.msi的安装问题,但我认为我不需要解决,因为我的开发机器已经安装了它们。如果我没有在安装中包含这些,我的应用程序将不会运行。我不确定我还需要做什么来安装这些。我确信我已经在我的开发环境之外做过几次了。你可以正常地安装PIA和VSTO程序集,你不需要专门设置这些程序集的安全性。我会这样做(首先关闭所有office应用程序):1。安装PIA 2。将VS3安装到运行时3。安装插件4。设置插件的安全性不要将PIA和VSTO运行时与应用捆绑在一起。将它们从项目生成中排除。Microsoft为那些不需要单独设置安全策略的安装程序提供单独的安装程序。
string solutionInstallationLocation = Path.GetDirectoryName(assemblyPath);
string solutionInstallationUrl = Path.Combine(solutionInstallationLocation, "*");
string policyLevel;
string parentCodeGroup;
if (machinePolicyLevel)
{
policyLevel = "-m"; // Use Machine-level policy.
parentCodeGroup = "My_Computer_Zone"; // Use My_Computer_Zone for assemblies installed on the computer.
}
else
{
policyLevel = "-u"; // Use User-level policy.
parentCodeGroup = "All_Code";
}
// Add the solution code group. Grant no permission at this level.
string arguments = policyLevel + " -q -ag " + parentCodeGroup + " -url \"" + solutionInstallationUrl + "\" Nothing -n \"" + solutionCodeGroupName + "\" -d \"" + solutionCodeGroupDescription + "\"";
try
{
RunCaspolCommand(frameworkFolder, arguments);
}
catch (Exception ex)
{
string error = String.Format("Cannot create the security code group '{0}'.", solutionCodeGroupName);
throw new Exception(error, ex);
}
// Add the assembly code group. Grant FullTrust permissions to the main assembly.
try
{
// Use the assembly strong name as the membership condition.
// Ensure that the assembly is strong-named to give it full trust.
//AssemblyName assemblyName = Assembly.LoadFile(assemblyPath).GetName();
//arguments = policyLevel + " -q -ag \"" + solutionCodeGroupName + "\" -strong -file \"" + assemblyPath + "\" \"" + assemblyName.Name + "\" \"" + assemblyName.Version.ToString(4) + "\" FullTrust -n \"" + assemblyCodeGroupName + "\" -d \"" + assemblyCodeGroupDescription + "\"";
//RunCaspolCommand(frameworkFolder, arguments);
//TODO- MS Hardcoded for now (better at assembly dll level use todo 1)
arguments = policyLevel + " -q -ag \"" + solutionCodeGroupName + "\" -url \"" + solutionInstallationUrl + "\" FullTrust -n \"" + assemblyCodeGroupName + "\" -d \"" + assemblyCodeGroupDescription + "\"";
RunCaspolCommand(frameworkFolder, arguments);
//TODO: 1 code below will create a separate group per assembly path, also need to check if AcnUI assembly is installed in GAC.
//AddFullTrust(frameworkFolder, assemblyPath, policyLevel, solutionCodeGroupName, assemblyCodeGroupName, assemblyCodeGroupDescription);
}
catch (Exception ex)
{
try
{
// Clean the solutionCodeGroupName.
RemoveSecurityPolicy(machinePolicyLevel, solutionCodeGroupName);
}
catch {}
string error = String.Format("Cannot create the security code group '{0}'.", assemblyCodeGroupName);
throw new Exception(error, ex);
}
}
internal static void RemoveSecurityPolicy(
bool machinePolicyLevel,
string solutionCodeGroupName)
{
string frameworkFolder = GetFrameworkFolder();
string policyLevel;
if (machinePolicyLevel)
policyLevel = "-m"; // Use Machine-level policy.
else
policyLevel = "-u"; // Use User-level policy.
string arguments = policyLevel + " -q -rg \"" + solutionCodeGroupName + "\"";
RunCaspolCommand(frameworkFolder, arguments);
}
private static string GetFrameworkFolder()
{
// Get the targeted Framework folder.
Version version = new Version(2, 0, 50727);
return GetRuntimeInstallationDirectory(version, true);
}