如何从[SourceDir]属性值

时间:2015-09-01 12:05:52

标签: c# wix

我有 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 \

中的最后一个\

4 个答案:

答案 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;格式化。