Visual Studio安装程序项目中快捷方式参数中的变量被忽略。

4

我在阅读这篇文章时(链接),想要寻找一种卸载安装程序的替代方法,并尝试了以下方法,但遗憾地失败了:

我创建了一个C#虚拟应用程序的安装项目。我添加了它的构建输出和一个包含以下内容的Uninstall.bat文件:

echo %1
msiexec /x %1

我随后在快捷方式的参数字段中添加了一个带有[Product Code]的文件快捷方式:

Shortcut

我的想法是Uninstall.bat将被调用并将产品代码(已解决)作为参数。
设置完成后,没有任何效果,参数未从快捷方式传递给安装程序。命令窗口的输出如下:
ECHO is on.
msiexec /x
%1参数似乎不存在。在二进制编辑器中查看LNK文件时,产品代码似乎存在。
这里发生了什么?
尝试各种参数和简单的回显:
  1. [Product Code] -> 忽略
  2. {%hardcodedProductCode%} -> 作为%1传递给批处理
  3. [Product Name] -> 忽略
  4. Constant [Product Code] -> 只有常量作为%1传递给批处理
  5. [Product Name] Constant [Product Code] -> 只有常量作为%1而不是%2传递给批处理
  6. [Product Name] Constant [Product Code] [UndeclaredVariable123] -> 只有常量作为%1传递给批处理
  7. $[Product Code] -> 只有$作为%1传递给批处理
第5个示例显示,如果将常量提升到位置1,则会忽略变量。

为更好地了解发生的情况,建议尝试以下想法:(1)在参数字段中,使用一个常量参数、一个常量参数和一个变量、一个不同于[产品代码]的变量。(2) 查看其余的快捷方式参数,目标等。 - PA.
也许您缺少了一些引号。包含空格的路径需要用引号括起来。 - rmrrm
@CosminPrivu 这里没有路径。[产品代码]生成一个没有空格的字符串。 - MPelletier
@PA 哦!有趣的是,如果我硬编码产品代码,它就能工作。我想知道LNK文件是什么样子的。这将在今天稍晚些时候进行。 - MPelletier
1个回答

3

$ 只是最后一个测试。看看其他数字。方括号只应该起作用,但实际上并没有。 - MPelletier
空格好像不太行,我打算试试去掉空格。 - MPelletier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接