安装程序时读取路径的问题

添加人:iyond五级(2333分)   添加时间:2007-04-30    阅读次数:2554  收藏此教程


    今天和个朋友讨论到这个问题。

    虽然在WEB安装与部署项目里的用户界面视图无法取得安装路径,也无法将安装路径放入InstallContext的Parameter里面,当然,也更不能通过遍历Parameter里面的变量来读取安装路径的值。但是,可以利用反射的机制。

    Installer类的Install方法,实际上是在完成拷贝文件后才执行的。而所添加的自定义操作的类,在运行时,是会先被拷贝到安装目录的根目录下面(安装完后发现不见了,估计是被删掉了)。所以,完全可以通过反射的机制去读取该程序集的路径从而得到安装路径。代码很简单

string stLocation;
Assembly asm = Assembly.GetExcutingAssembly ();
stLocation = asm.Location;

    另外,曾认为这种方法与读取AppDomain的APPBASE方法是一样的,但是,实际上有不同。

    有三种方式去读取AppDomain的基目录路径

string dir1 = AppDomain.CurrentDomain.BaseDirectory;
string dir2 = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
string dir3 = (string) AppDomain.CurrentDomain.GetData("APPBASE");

    在MSDN对基目录的解释是“程序集管理器开始探测应用程序集的目录”

    本来,我觉得读出来的至少应该是安装程序的所在的目录,但是读取出来的属性实际上居然是“系统盘:\windows\system32”?!

    我所知道的,在system32目录下的相关文件,有作为“垫片”的用来加载托管程序、进行即时编译并加载相应版本的CLR的mscoree.dll,也有两个版本的CLR,一个是mscorwks.dll,这个是工作站版本的CLR,一个是mscorsvr.dll,这个是服务器版本的CLR。但是觉得这些文件都和AppDomain的基目录风马牛不相及,实在是比较困惑。

    设想Windows Installer假如在这个目录下放有某几个.NET版本的dll,而Installer类在这些dll里面有定义,在安装程序的时候,那么应该会首先使用到这些文件,这样的解释就比较合理了。但是,这还是个人的设想,希望能得到证实。欢迎大家讨论。

1页 第1上一页1下一页
相关的教程: 部署 安装
收藏此教程 到论坛求助

当前平均分: 0.0(0 次打分)

012345678910
评论主题
您的大名
您的评论
验证码 点击换一个验证码
知识库搜索: