在 Outlook VSTO 加载项的路径中转义 & 符号
Escaping ampersand in a path to Outlook VSTO add-in
我有一个用于 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;
}
}
尝试 url 编码 (%26
) 符号。
我有一个用于 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;
}
}
尝试 url 编码 (%26
) 符号。