我有一个用于Outlook的VSTO外接程序。它由帮助器外接程序通过代码加载,方法是手动将相关值添加到注册表中,联系Outlook以启动外接程序,然后清除注册表。
发生这种情况时,其中一个客户的加载项路径包含一个与号(&)。这会阻止加载外接程序,但会出现以下异常:
System.ArgumentException: Value does not fall within the expected range.
at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.GetManifests(TimeSpan timeout)
at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.InstallAddIn()经过一些研究,我发现路径中的&符号是罪魁祸首。我正在寻找一种方法来克服这个限制。我已经创建了一个简单的空测试加载项,并尝试通过*.vsto文件安装它,该文件位于它成功的路径中带有“与”符号的文件夹中。Outlook加载外接程序正常。因此,我知道VSTO肯定有一种方法可以做到这一点。
我尝试使用&&或&;来转义路径以显示,但没有任何帮助。有没有其他方法可以解决这个问题?以下是我从代码加载外接程序的方式的示例:
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Office\Outlook\Addins", true))
{
key.DeleteSubKey("MyAddIn", false);
using (RegistryKey addinKey = key.CreateSubKey("MyAddIn"))
{
addinKey.SetValue("Manifest", $"{ new Uri(addInPath).AbsoluteUri) }|vstolocal");
addinKey.SetValue("Description", "My Outlook Addin");
addinKey.SetValue("FriendlyName", "My Outlook Addin");
addinKey.SetValue("LoadBehavior", 0);
}
_outlookApplication.COMAddIns.Update();
key.DeleteSubKey("MyAddIn", false);
}
foreach (COMAddIn comAddin in _outlookApplication.COMAddIns)
{
if (comAddin.Description == "My Outlook Addin")
{
ConnectAddIn(comAddin);
break;
}
}发布于 2019-02-14 23:15:13
尝试对&符号进行url编码(%26)。
https://stackoverflow.com/questions/54693185
复制相似问题