我有
Wix中的<Property Id="MsiDirectory">[SourceDir]\\</Property>
在我的自定义操作中
string msiDirectory = session["MsiDirectory"];
session.Log(" msiDirectory: {0}", msiDirectory);
msiDirectory = msiDirectory.Remove(msiDirectory.Length - 1);
session.Log(" (2): {0}", msiDirectory);
msiDirectory = msiDirectory.Remove(msiDirectory.Length - 1);
session.Log(" (1): {0}", msiDirectory);
msiDirectory = msiDirectory.Remove(msiDirectory.Length - 1);
session.Log(" (4): {0}", msiDirectory);
结果是:
msiDirectory:C:\ temp \\(2):C:\ temp \(1):C:\ temp \(4):[SourceDir
有没有办法在C:\ temp \中删除\,所以我只用C:\ temp结尾?
根据意见和建议,
我改变了
<Property Id="MsiDirectory">[SourceDir]\\</Property> to
<Property Id="MsiDirectory">[SourceDir]</Property>
string msiDirectory = session["MsiDirectory"];
session.Log(" msiDirectory: {0}", msiDirectory);
msiDirectory = msiDirectory.Remove(msiDirectory.Length - 1);
session.Log(" (2): {0}", msiDirectory);
msiDirectory = msiDirectory.Remove(msiDirectory.Length - 1);
session.Log(" (1): {0}", msiDirectory);
msiDirectory = msiDirectory.Remove(msiDirectory.Length - 1);
session.Log(" (4): {0}", msiDirectory);
msiDirectory:C:\ temp \(2):[SourceDir(1):[SourceDi(4):[SourceD
session.Log(" msiDirectory: {0}", msiDirectory.TrimEnd('\\'));
给出c:\ temp \
我只想删除C:\ temp \
中的最后一个\答案 0 :(得分:0)
为什么不直接替换&#34; \&#34;用空字符串?
"C:\temp\".Replace(@"\", "");
答案 1 :(得分:0)
如果您希望保留前面的斜杠,只需删除最后一个斜杠,您可以尝试:
... msiDirectory.TrimEnd('\\');
如:
session.Log(" (1): {0}", msiDirectory.TrimEnd('\\'));
这将删除任意数量的反斜杠(如果有的话),但仅当它们作为字符串中的最后一个字符出现时。
e.g。
C:\temp\ --> C:\temp
C:\temp --> C:\temp
C:\temp\\ --> C:\temp
或者,如果您希望删除所有反斜杠(对于文件路径而言是奇怪的),您可以使用以下方法轻松完成:
... msiDirectory.Replace(@"\", "");
答案 2 :(得分:0)
如果您确切地知道您的期望(即C:temp而不是C:\ temp \),您可以使用
msiDirectory = msiDirectory.Replace("C:\temp\\","C:temp");
或最佳
msiDirectory = msiDirectory.Replace(@"\","");
答案 3 :(得分:0)
请注意,<Property Id="MsiDirectory">[SourceDir]\\</Property>
将名为MsiDirectory
的属性设置为(字面上)[SourceDir]\\
的值。如果您希望MsiDirectory
成为SourceDir
中值的副本,则必须使用自定义操作进行复制。您可以使用类型51(设置属性)自定义操作执行此操作,或者因为您已经编写代码,只需从那里的SourceDir
读取并写入相关的MsiDirectory
。
一旦您使用C:\temp\
而不是[SourceDir]
值,其余部分应该更有意义。
附注:您可以尝试session.Log("MsiDirectory: [MsiDirectory]")
查看是否可以记录属性MsiDirectory的值,而不必对其进行其他格式设置。 (如果存在正确的重载,您可以传递包含[1]
的格式字符串和包含msiDirectory值的记录。)看来您首先使用的调用执行string.Format
然后通过Windows安装程序&#39;格式化。