如何使用C#VSTO在PowerPoint中单击自定义按钮从msi软件包打开帮助文件pdf

如何使用C#VSTO在PowerPoint中单击自定义按钮从msi软件包打开帮助文件pdf,c#,plugins,windows-installer,vsto,powerpoint-2010,C#,Plugins,Windows Installer,Vsto,Powerpoint 2010,我已经为使用C#VSTO开发的PowerPoint加载项创建了一个.msi安装程序文件。我必须在功能区按钮上单击打开帮助文件pdf。我已经嵌入了msi包的帮助文件pdf 我通过使用以下代码使用硬编码路径(安装外接程序的默认路径)实现了此功能: private void btnHelp_Click(object sender, RibbonControlEventArgs e) { string filepath = @"C:\Program Files (

我已经为使用C#VSTO开发的PowerPoint加载项创建了一个.msi安装程序文件。我必须在功能区按钮上单击打开帮助文件pdf。我已经嵌入了msi包的帮助文件pdf

我通过使用以下代码使用硬编码路径(安装外接程序的默认路径)实现了此功能:

private void btnHelp_Click(object sender, RibbonControlEventArgs e)
        {
            string filepath = @"C:\Program Files (x86)\Microsoft\Office\PowerPoint\AddIns\myAddin\HelpFile.pdf";
            string locationToSavePdf = Path.Combine(Path.GetTempPath(), filepath);      
            Process.Start(locationToSavePdf);
        }
但是我知道,一旦最终用户更改了她/他想要安装外接程序的位置,这将不起作用。有人能帮我吗?这样我就可以动态地获取帮助文件pdf的路径(只要用户更改位置),或者有其他方法吗

欢迎提供任何帮助/建议。
谢谢。

您可以使用以下命令获取当前正在执行的程序集文件夹的位置:

var assemblyInfo = Assembly.GetExecutingAssembly();
var uriCodeBase = new Uri(assemblyInfo.CodeBase);
var helpFileLocation = Path.GetDirectoryName(uriCodeBase.LocalPath) + @"\HelpFile.pdf";
Process.Start(helpFileLocation );

如果您正在生成MSI文件并希望保存最终目标文件夹,则可以创建一个注册表项来存储该值。假设该位置的属性名为INSTALLDIR,您将创建一个注册表项,如下所示:

RegistryKey Id=“MySetupRegKey”Root=“HKLM”Key=“Software\MyLocation”Action=“createAndRemoveOnUninstall”

RegistryValue Id=“MySetupRegValue”Type=“string”Name=“InstallDir”Value=“[InstallDir]” /注册表项>

我省略了尖括号,因为我还没有弄清楚如何正确地发布它们:)


但是你可以看到那个位置

感谢Mitja,但是您共享的代码提供了ClickOnce部署文件夹路径(C:\Users\username\AppData\Local\Apps\2.0),而我想要的是ApplicationFolder(保存所有应用程序文件,如.vsto和DLL)路径,我们在构建.msi包时在文件系统中提到了该路径。抱歉,如果我在提问时不清楚。嗯,很奇怪,我想这是由于ClickOnce的部署。我们使用Wix安装程序,它指向正确的文件夹。下面是一个类似的问题,可能会有所帮助: