none
如何获取VS部署程序Setup.exe的路径 RRS feed

  • 问题

  • 各位老师,

    我做的一个VS方案,使用Window Installer制作了安装项目。因为特殊需要,又为该部署项目添加了一个自定义操作(Custom Action),功能是将和Setup.exe同目录的一个文本文件,如foo.txt,复制到所安装的应用程序的执行文件的同目录中。

    我的问题是:自定义操作的代码如何获取Setup.exe的路径。我尝试了好几个语句,如:

                //string exePath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;

               // 去掉执行文件名后,得到的路径却是“C:\Windows\syswow64\”

                //https://iq.direct/blog/51-how-to-get-the-current-executable-s-path-in-csharp.html
                string exeFullPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
                string exePath = System.IO.Path.GetDirectoryName(exeFullPath);
                //获取的路径是:C:\Program Files (x86)\软件开发商名\应用程序产品名\

    总之,都不是我想获取的安装程序Setup.exe所在的目录。请知道的老师告诉我正确方法,谢谢!


    ly_he

    2020年11月27日 15:17

全部回复

  • 你好,

    你可以尝试下面的代码来获取setup.exe的路径。

     DirectoryInfo myDirectory = new DirectoryInfo(Environment.CurrentDirectory);
                string path = Path.Combine(myDirectory.Parent.Parent.FullName, "publish");
                Console.WriteLine(path);

    通常而言, setup.exe在publish文件夹中。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年11月30日 7:40
    版主
  • 首先感谢Jack Jun老师的回复。

    我会抓紧测试,有什么问题及时反馈。


    ly_he

    2020年11月30日 13:19
  • Jack老师,看样子VS Installer的Custom Action项目的Installer Class中的代码并不能和一般程序同样对待。比如您提到的“DirectoryInfo(Environment.CurrentDirectory);”只能获取“C:\Wiondows\SysWOW64”。最后,我是使用这个办法解决问题: string[] sourceDirectories = System.IO.Directory.GetDirectories(@"c:\", "我需要定位的目录名"); string sourceDirectory = sourceDirectories[0]; 这个方法缺陷是,我要查找的setup.exe文件必须位于C:\。谢谢老师!

    ly_he

    2020年12月3日 4:58
  • 问题解决了:

    首先,按照以下2个网文做一遍。

    https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2010/d9k65z2d(v=vs.100)

    https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/9cdb5eda(v=vs.100)

    然后,参考第2篇文章填写CustomActionData的办法,

    1、在安装项目将自定义操作项目作为主输出,

    2、在安装项目的自定义操作编辑界面,选择“Commit”节点下的主输出,为属性窗口的“CustomActionData”赋值:/sourceDir="[SourceDir]\" /targetDir="[TARGETDIR]\"。

    3、在自定义操作项目的安装程序类(Installer class )的Commit方法中,分别使用以下语句获取源和目标目录:

                string sourceDir = base.Context.Parameters["sourceDir"].ToString();
                sourceDir = sourceDir.Substring(0, sourceDir.Length - 2); 

                string targetDir = base.Context.Parameters["targetDir"].ToString();
                string targetPath = targetDir.Substring(0, targetDir.Length - 2) ;

    要点,认真把2个教程实现,举一反三,即可解决有关问题,


    ly_he

    2021年2月21日 3:29
  • 学习!!!
    2021年2月22日 1:01