获取安装目录安装盾

2024-03-31

我想通过安装盾来创建我的设置。 我使用命令参数Setup.exe /path=[SETUPEXEDIR]\log.txt我的设置位置是Desktop\myapp\Setup.exe使用[SETUPEXEDIR]时返回临时文件夹 我希望在使用 [SETUPEXEDIR] 时返回我的 Setup.exe 位置。

我使用 installshield 2016 版本 23 SP 2。 我使用 MSI 脚本。

我想要获取位置并在命令参数先决条件中使用。


有点难以理解你到底在问什么,但是据我了解,您想知道 setup.exe 运行的位置?

变量

  • The 第一个问题是什么安装盾版本你正在用吗?

  • The 第二个问题是:你在使用吗基本MSI or 安装脚本 MSI?

  • The 第三个问题是:什么类型的发布媒体你正在用吗?

  • 可能还有更多相关问题...

给智者的一句话:如果您确实在使用 Installscript MSI,您应该知道这是一个非常有缺陷的项目类型,您应该认真考虑切换到 Basic MSI,以免自己陷入困境。如果您愿意,我可以提供更多相关信息。我不得不完全放弃 Installscript MSI 才能解决我的部署问题。

安装屏蔽属性

不同版本的 Installshield 似乎可能表现不同,并且对这些文件夹属性/变量的支持也不同。这些属性似乎也不适用于所有类型的发布介质。最后,它们可能只能分别在 Basic MSI 或 Installscript MSI 中工作。我发现的属性是:包裹_位置 http://helpnet.installshield.com/installshield21helplib/Subsystems/installshield21langref/helplibrary/PACKAGE_LOCATION.htm#langref_variabledata_2139200659_1022943, 设置执行目录 http://helpnet.installshield.com/installshield21helplib/helplibrary/SETUPEXEDIR.htm and SRCDIR http://helpnet.installshield.com/installshield21helplib/Subsystems/installshield21langref/helplibrary/LangrefSRCDIR.htm#langref_variabledata_2139200659_1023134。似乎还有一个名为的 Installscript 方法获取当前目录() http://helpnet.installshield.com/installshield22helplib/Subsystems/installshield22langref/helplibrary/LangrefGetCurrentDir.htm在最新版本的 Installshield 中可用,但文档警告有关使用它的信息(请参阅链接)。

请按顺序访问上面的链接并详细阅读每个属性(或方法)的限制。使用符合您的要求和场景的选项(如果有)非常重要。例如,PACKAGE_LOCATION 仅适用于Installscript MSI,SETUPEXEDIR 由Setup.exe 设置。如果最终用户直接运行 .msi 包,则不会设置 SETUPEXEDIR。

MSI 内置属性

在我看来,获取内置 MSI 属性源目录 https://msdn.microsoft.com/en-us/library/windows/desktop/aa371857%28v=vs.85%29.aspx可能是一个可以尝试的选择。我的快速测试表明它适用于 InstallScript 和 Basic MSI。但是,我不知道这是否适用于所有版本的 Windows Installer。请在各种 Windows 版本上进行测试以确定。

您还应该意识到使用 SourceDir 的潜在问题,该问题在SETUPEXEDIR 的文档 http://helpnet.installshield.com/installshield21helplib/helplibrary/SETUPEXEDIR.htm。这适用于编译为包含所有文件的单个压缩 setup.exe 的安装程序 - 此启动器会将 MSI 文件提取到临时位置并从那里运行。当我尝试使用未压缩的网络图像时,使用 SourceDir 效果很好。

最后,如果您使用 setup.exe 压缩所有文件并启用系统上 MSI 的缓存,那么您将从内部某处运行:C:\WINDOWS\Downloaded Installations\{GUID}\.

所有这些在较新版本的 Installshield 上都可能有所不同。我正在使用现有的旧版本进行测试。请对您的版本进行彻底测试。

我还应该提到原始数据库 https://msdn.microsoft.com/en-us/library/aa370562%28VS.85%29.aspx内置 MSI 属性。检查链接以获取有关如何设置的文档。

一些链接:

  • Installscript 项目 - 获取 Setup.exe 位置 https://community.flexerasoftware.com/archive/index.php?t-149584.html.
  • 如何找到setup.exe目录? http://forum.installsite.net/index.php?showtopic=14025

用于测试的 Installscript 函数

仅供参考,这里有一个快速但肮脏的函数,用于通过 Installshield 自定义操作测试这些属性(这适用​​于其他可能在没有像您一样进行测试的情况下发现此问题的人):

function TestFolderProperties(hMSI)   
     STRING svName;
     NUMBER nvSize;
begin             

    // MSI properties
    nvSize = 256;
    MsiGetProperty (hMSI, "SETUPEXEDIR", svName, nvSize);
    MessageBox ("SETUPEXEDIR: " + svName, INFORMATION);
    MsiGetProperty (hMSI, "SourceDir", svName, nvSize);
    MessageBox ("SourceDir: " + svName, INFORMATION);
    MsiGetProperty (hMSI, "OriginalDatabase", svName, nvSize);
    MessageBox ("OriginalDatabase: " + svName, INFORMATION);

    // System Variables
    MessageBox ("SRCDIR: " + SRCDIR, INFORMATION);
    // PACKAGE_LOCATION is not available in my version of Installshield, enable and test 
    //MessageBox ("PACKAGE_LOCATION: " + PACKAGE_LOCATION, INFORMATION);
end;

请记住将导出添加到 setup.rul 文件的顶部:

export prototype TestFolderProperties(HWND);  

测试编译以验证,然后创建 Installscript 自定义操作并将其放入序列中。使自定义操作的“返回处理”同步(忽略退出代码)。我将其放在序列中的 InstallFinalize 之前,使用立即模式执行。重建您的版本并运行它。尝试不同的版本构建配置(带有外部源文件的 MSI、仅带有内部压缩文件的 MSI、带有外部文件的 setup.exe 启动器、带有压缩内部所有文件的 setup.exe、带有缓存的 setup.exe、不带缓存的 setup.exe 等。 ..行为可能会有所不同)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取安装目录安装盾 的相关文章

随机推荐

  • Prometheus Java 摘要指标是线程安全的吗?

    普罗米修斯是Java吗Summary对象线程安全 如果我在类中将其声明为静态 则该类的所有实例都将使用它 Prometheus 是否为该度量对象实现了线程安全 Prometheus 客户端库负责处理方向检测的线程安全等细节 例如Summar
  • is_numeric() 与 is_float() 与 is_int()

    我的理解是 if is numeric input true 那么要么 is float input true OR is int input true OR input 0 OR input是一个数字字符串 意味着如果没有用引号括起来 它
  • FFMPEG 在视频末尾添加图像

    我需要使用 FFMPEG 在 mp4 视频文件末尾添加一秒钟的图像 我的视频尺寸是 WxH 图像尺寸是 MxM 因此视频和图像尺寸不同 我尝试了不同的选项 以便在视频末尾添加图像 ffmpeg i concat videoIn mp4 im
  • iOS 将照片保存在应用程序特定的相册中

    我正在创建一个 iOS 5 应用程序 我想将照片保存到设备中 我想将照片保存到我的应用程序特定的相册中 因此我需要创建相册 然后将照片保存到相册中 我知道如何创建相册 ALAssetsLibrary library ALAssetsLibr
  • R:加速“group by”操作

    我有一个模拟 中间有一个巨大的聚合和组合步骤 我使用 plyr 的 ddply 函数对这个过程进行了原型设计 它可以很好地满足我的大部分需求 但我需要更快的聚合步骤 因为我必须运行 10K 次模拟 我已经在并行扩展模拟 但如果这一步骤更快
  • 设计:新错误(可加密)

    我已经一周没有碰过我的代码了 但是当我捆绑并尝试运行我的网络服务器时 我现在收到以下错误 这让我死在了水里 按照错误输出中的建议包含可设计加密的 gem 并不能解决问题 并且仍然会导致相同的错误 任何帮助是极大的赞赏 DEVISE Devi
  • Reactjs:使用 shouldComponentUpdate() 停止在特定状态更改时重新渲染

    我的组件 onload 中有多个 setState 我的页面在单击下拉值时重新呈现 因为单击时我通过以下方式存储这些值setState 为了停止点击时重新渲染 我使用下面的代码 shouldComponentUpdate return fa
  • Nginx 反向代理配置

    我在使用 nginx 进行简单配置时遇到问题 我有一台托管 docker 容器的服务器 因此 nginx 位于容器中 所以我们调用 urlfoo com 我想要网址foo com service1实际上只是去另一个端口上的 foo com
  • CSS 中如何使用“大于”或“>”字符?

    我在 CSS 文件中多次看到这个字符 但我不知道它是如何使用的 谁能向我解释一下并展示它们如何使页面样式变得更容易 这是一个 CSS 子选择器 P gt SPAN表示将以下样式应用于作为子级的所有 SPAN 标记P tag 请注意 孩子 的
  • Visual Studio Code 中是否有像 DocBlockr 这样的代码注释功能?

    我使用 Sublime Text 3 Atom io 和 Bracket io 作为以前的编辑器 我也非常喜欢新的 Mac 版 Visual Studio 代码编辑器 Sublime 有类似 DocBlockr 的代码注释功能吗 这对我来说
  • Android Studio 0.5.9错误代码42

    每次我尝试从 eclipse 导入项目时 我都会收到这样的错误 Error Execution failed for task app mergeDebugResources 错误 无法运行命令 D Android sdk build to
  • 如何优化间接基数排序? (又名如何优化不可预测的内存访问模式)

    我用 C 编写了一个间接基数排序算法 间接 我的意思是它返回项目的索引 include
  • Kubernetes TLS 秘密证书过期

    我使用 openssl 创建通配符自签名证书 我将证书有效期设置为 到十年 我通过使用 openssl 检查证书来仔细检查有效期 我使用步骤 1 中准备的私钥和证书创建一个 Kubernetes 密钥 如下所示kubectl命令 kubec
  • 如何从ocaml列表中获取子列表

    我正在查看列表文档 图书馆好像没有提供sublist功能 我正在尝试从中获取元素列表i to j 现在我必须把它写成 let rec sublist list i j if i gt j then else List nth list i
  • 如何解析会导致非法 C# 标识符的 JSON 字符串?

    我一直在使用NewtonSoft JSON 转换 http james newtonking com json用于解析 JSON 字符串并将其转换为 C 对象的库 但现在我遇到了一个非常尴尬的 JSON 字符串 我无法将其转换为 C 对象
  • JavaMail 与 Oauth 和 Office365

    我正在用 Java 构建一个简单的命令行应用程序 它可以登录我的电子邮件箱 IMAP 并下载所有附件 我使用了基本身份验证 但 Microsoft 正在禁用它 因此我尝试将我的应用程序转换为使用 OAuth 在阅读了不同的 OAuth 流程
  • 部署时出现 aws beanstalk 403 错误

    您好 我正在使用亚马逊网络服务弹性豆茎 每次我使用 git aws push 时 我的 php 应用程序都会成功上传但是 当我单击 url 时 它会显示 Forbidden You don t have permission to acce
  • 自旋锁与忙等待[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 请解释原因忙碌等待通常不受欢迎 而Spinning通常被认为还可以 据我所知 它们都会无限循环 直到满足某些条件 A 自旋锁通常在资源争用较少时
  • 使用Mysql lower_case_table_names为1

    我已经使用 yum 在 linux 中安装了 mysql v5 5 17 现在我想要默认的小写表名 所以我添加了 set variable lower case table names 1 in etc my cnf 但如果我这样做 我就无
  • 获取安装目录安装盾

    我想通过安装盾来创建我的设置 我使用命令参数Setup exe path SETUPEXEDIR log txt我的设置位置是Desktop myapp Setup exe使用 SETUPEXEDIR 时返回临时文件夹 我希望在使用 SET