Visual Studio安装项目 - 如何从文件搜索启动条件获取目录路径

时间:2013-08-07 11:42:12

标签: visual-studio-2010 visual-studio

我正在寻找一种方法将文件添加到现有目录中,该目录具有随机名称作为Visual Studio安装项目的一部分,我希望有人可以帮助我解决这个难题。

我一直在尝试使用启动条件获取目录的已发现路径属性;不幸的是,此方法返回完整的文件路径,包括文件名,不能用作目录属性。


相关目录的格式为[AppDataFolder]Company\Product\aaaaaaaaaaaa\ 其中aaaaaaaaaaaa是随机安装字符串。

在启动条件设置中,我通过搜索将出现在其中的文件来检查目录是否存在,

搜索目标计算机

(Name): File marker
Filename: sample.txt 
Folder: [AppDataFolder]Company\Product\
Property: DIRFILE

启动条件

(Name): File marker exists
Condition: DIRFILE

在安装项目中,我添加了我想要插入的文件,其中包含详细信息

Condition: DIRFILE
Folder: 'Installation folder'

然后在文件系统设置中,我为随机目录aaaaaaaaaaaa

添加一个新的文件夹条目
(Name): Installation folder 
Condition: DIRFILE
DefaultLocation: [DIRFILE]\..\ *Incorrect*
Property [DIRLOCATION]

正如您所看到的,安装程序检测到标记文件的存在但是,在使用[DIRFILE]时,安装程​​序会错误地尝试将其插入文件中,而不是将文件放在同一位置;

这是因为返回了文件路径

[AppDataFolder]Company\Product\aaaaaaaaaaaa\sample.txt

我需要目录路径

[AppDataFolder]Company\Product\aaaaaaaaaaaa

因此我想知道是否有可能从搜索目标机器返回找到该文件的目录(而不是文件的文件位置),如果我可以通过执行字符串替换来提取目录路径文件系统设置中DefaultLocation字段中文件位置DIRFILE上的文件名,或者是否还有其他方法我错过了?

1 个答案:

答案 0 :(得分:0)

我对安装项目中的一个简单解决方案非常感兴趣。

我解决它的方法是将文件安装到临时位置,然后将它们复制到AfterInstall事件处理程序中的最终位置。不是很优雅的解决方案!由于它不再关心用户选择的目标路径,我删除了该对话框。卸载时我还需要特别小心。

public override void OnAfterInstall(IDictionary savedState)
{
    base.OnAfterInstall(savedState);

    // Get original file folder
    string originDir = Context.Parameters["targetdir"];

    // Get new file folder based on the dir of sample.txt
    string newDir = Path.GetDirectoryName(Context.Parameters["dirfile"]);

    // Application executable file name 
    // (or loop for all files on the path instead)
    string filename = "ApplicationName.exe";

    // Move or copy the file
    File.Move(Path.Combine(originDir, filename), Path.Combine(newDir, filename)));
}