你是指 得到 你的setup.exe 所在的文件夹?

解决方案 »

  1.   

    你要添加自定义操作,可以建立一个新的C#类型库,从Install类继承,然后在安装项目中添加自定义的操作项,向其添加参数,这个参数可以在Install类中获取,从而得到用户在安装的时候选择的安装路径.
      

  2.   

    你要添加的这个参数大致如下:
    /InstallDir="[TARGETDIR]\"这里的"[TARGETDIR]\"是基本固定的格式 ,而InstallDir则是自已定义的变量名字,由这个名字就可以得到用户在安装程序时选择的路径,比如:
    protected override void OnCommitting(System.Collections.IDictionary savedState)
    {
    try
    {
    string installDir = this.Context.Parameters["InstallDir"];
    FileInfo fi = new FileInfo(installDir);
    installDir = fi.DirectoryName;
    if (!installDir.EndsWith(@"\"))
    {
    installDir += @"\";
    }
    ...
      

  3.   

    [TARGETDIR]是用户选择的安装路径,我要的是Setup的运行路径
      

  4.   

    你在自定义类里取Application.StartPath啊.
      

  5.   

    怎么可能没有呢,只是你没有引用System.Windows.Forms这个名称空间而已,你可以直接使用如下:
    string setupPath = System.Windows.Forms.Application.StartupPath你试试看!
      

  6.   

    不行,提示System.Windows在命名空间中不存在
      

  7.   

    在你的 自定义安装类库 中 引用System.Windows.DLL
      

  8.   

    不提示错误了,但是得到的地址怎么是windows/system32呢
      

  9.   

    或许你在思路上有问题,因为安装程序其实是运行的C:\WINDOWS\system32\msiexec.exe.一般来说安装程序的时候不需要知道安装程序到底在哪里.
      

  10.   

    我也遇到同样的问题,想获得安装程序的运行路径而不是C:\WINDOWS\system32 这个目录
      

  11.   

    我现在也遇到了这样的问题
    楼上的高手们好像没有解决这个问题我倒是想到了一个遍历所有进程的方法
    但是,郁闷的是我获取了所有的进程,这其中竟然没有运行的那个setup,倒是有好几个msiexec.exe
      

  12.   

    讨论一下这种实现方法:http://www.cnblogs.com/jetxia/archive/2007/11/20/965212.html