private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
{
string InstallPath = System.IO.Path.GetDirectoryName(serviceInstaller1.Context.Parameters["AssemblyPath"]);;
}
private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
{
string InstallPath = System.IO.Path.GetDirectoryName(serviceInstaller1.Context.Parameters["AssemblyPath"]);;
}
您的自定义动作是一个延迟的自定义动作,只有某些属性可用,请参阅以下页面获取更多详细信息:http://msdn.microsoft.com/en-us/library/aa370543(VS.85).aspx。您可以尝试将TARGETDIR属性添加到Visual Studio 2008中的CustomActionData中;但是,我没有使用Visual Studio 2008作为创作工具。
在Visual Studio 2008中进行复杂的安装非常困难,因为它抽象了MSI的许多关键功能。我强烈建议您查看WiX。
即使您不使用WiX,您也需要下载Orca,http://msdn.microsoft.com/en-us/library/aa370557(VS.85).aspx,并使用它来验证您的安装。这将为您节省无数小时的时间。
在安装过程中,我执行了以下操作:
// locate the installation directory and store it where we can find it during Commit
stateSaver.Add("TargetDir", Context.Parameters["DP_TargetDir"]);
后来,我能够在OnCommitted
后期访问TargetDir
:
string path = (string)savedState["TargetDir"];
不确定这是否有所帮助!我正在尝试找出如何可靠地确定安装目录,以便我的服务可以进行一些日志记录。
对于那些有多个的人,必须这样做
/AppID="[APPID]" /Path="[TARGETDIR]\"
在您的自定义操作中获取目标目录属性值,您可以手动转发它,方法是选择自定义操作视图中的自定义操作输出,并输入类似以下内容:
/TargetDir="[TARGETDIR]"
将其作为CustomActionData属性的值。
然后,您应该能够通过以下方式访问它:
string targetDir = Context.Parameters[ "TargetDir" ];
除了安装项目之外,您还可以使用一些安装程序构建服务。我认为,使用http://installer.codeeffects.com,您可以从您的网站中加载任何文件,并在用户安装您的服务时将它们放置在安装目录中。希望这有所帮助。