如何根据设备更改输出文件夹

时间:2013-02-26 22:49:40

标签: visual-studio-2008 compact-framework environment-variables windows-ce windows-mobile-5.0

首先,我将从我想要完成的工作开始,然后我将提供背景细节:

当我选择开始调试时,我希望输出目录根据通过Windows Mobile Device Center连接的设备而更改。 澄清:从我们的安装程序安装工作正常,但从Visual Studio调试是给我带来问题的。

我正在使用Visual Studio 2008.该项目是用C#for Compact Framework 3.5编写的智能设备项目,目标是Windows Mobile 5.0 Pocket PC Device R2(根据项目设置)。我发现当我定位此设备类型时,它可以在我们支持的所有Windows Mobile版本上正常工作。任何建议的解决方案都必须适用于Windows Mobile和Windows CE。

当我进入项目属性,然后转到设备选项卡时,它会显示输出文件文件夹:和输出路径。如果我单击...按钮,我可以将其更改为不同的默认值,甚至将其设置为根文件夹,然后完全指定我想要的确切路径作为子目录。在大多数设备上,如果我将它保留在(设备默认值)或从下拉列表中选择程序文件文件夹,它可以正常工作。问题是,当它在Windows CE设备上运行时,我们支持它需要从不同的位置运行。

可能的解决方案

多个项目解决方案:为不同的设备提供多个项目。这个问题是我不知道怎么做而不违反DRY原则,因为某些文件需要包含在输出中,我不想在不同的Start项目之间来回切换。

重新定义%CSIDL_PROGRAM_FILES%解决方案:更改%CSIDL_PROGRAM_FILES%的含义,因为这可以在指定Program Files所在位置的输出路径中。但是,我不知道这是否可能或从哪里开始尝试这个。我想也许这会在设备注册表中定义,但我找不到它。

自定义路径变量解决方案:选择根文件夹然后在子目录下以某种方式引用变量(可能以%开头和结尾?)在路径中我可以更改为我需要的(可能来自帖子) - 构建或预部署(如果有这样的事情)脚本)。我不知道这是否可能或从何处开始。

任何帮助将不胜感激,谢谢!

修改

在做了一些挖掘之后,我最好的猜测是%CSIDL_PROGRAM_FILES%是一个Windows CE环境变量。我仍然不知道是否可以创建或修改这些。

3 个答案:

答案 0 :(得分:1)

使用不同的解决方案/项目配置来使用不同的输出路径和调试设置:

在VS中右键单击解决方案和“Configuration Manager” enter image description here

在“Active solution configuration”下面的列表中单击 enter image description here

现在输入一个新的描述性名称,以及可以为新配置复制哪些设置。请启用“创建新项目配置”,然后单击“确定”

您现在有了新的解决方案和新的项目配置。 enter image description here

单击“确定”关闭解决方案配置管理器。

要更改所有或单个项目配置的设置,您必须右键单击解决方案,然后选择“属性” enter image description here

现在,您可以为每个配置设置不同的设置。

“Release_Device1”配置的部署设置: enter image description here

但是“Release”配置的不同部署设置: enter image description here

您还可以在配置集中使用不同的Debug设置: enter image description here

要添加什么东西?

答案 1 :(得分:0)

首先,我尝试在项目文件中使用环境变量:

    <DeploymentTool
    ForceDirty="-1"
    RemoteDirectory="$(ceRemoteDir)"
    RegisterOutput="0"
    AdditionalFiles=""
/>

但遗憾的是,只有在您启动VS并且稍后不更新时才会更新。

我会使用免费的remote tools

来使用自定义部署脚本

使用preg,你应该能够识别批处理脚本中的不同设备:

pregutl.exe hklm\Ident
例如,

将给出:

[HKLM\Ident]
Desc=""
Name="CK7007121144066"
OrigName="Pocket_PC"
Restriction=dword:00000002
Username="guest"

在一台设备上和另一台设备上我得到:

[HKLM\Ident]
Desc="Intermec CN3 Device"
Name="CN3A32110646073"
OrigName="IntermecCN3"
Restriction=dword:00000002
Username="guest"

在bat / cmd文件中过滤它并不难,然后根据pregutl查询使用pput将exe部署到不同的dir。

然后可以使用bat / cmd文件代替VS部署作为Post-Built Event。

是的,所有这些都有点复杂,但会起作用。

答案 2 :(得分:0)

如果我理解正确,我会看到你可以采取的几个选择:

  1. 让安装人员将这些可执行文件放在您需要的文件夹中,或

  2. 将您需要的所有数据放在中央位置(\Program Files\Data文件夹)。

  3. 尽管如此,第一个选项本身很难(通过VS2008环境无法进行调试)。

    你甚至可以使用两者的组合!

    现在,我将查看链接到的所有工具josef他从哪里得到所有这些很酷的玩具?