2017-08-30 106 views
-4

我想从我的Wix安装项目中将配置文件安装到C:驱动器,MyConfig文件夹。 我很难在目录中指定C:\,因为字符“:”在属性“名称”中是不允许的。Wix - 有条件地将文件安装到C: MyConfig文件夹

此外,我希望有条件地安装该文件,并以这种方式在卸载过程中不会被删除。

回答

0

经过一些试验和错误,我找到了答案。我只需要简单地添加SetDirectory元素来覆盖我的C Drive目录。

<PropertyRef Id="ENV_DEPLOY"/> 
<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFilesFolder"> 
     <Directory Id="CompanyName" Name="!(bind.property.Manufacturer)"> 
      <Directory Id="INSTALLFOLDER" Name="!(bind.property.ProductName)" /> 
     </Directory> 
    </Directory> 
    <Directory Id="CDrive" Name="CDrive"> 
     <Directory Id="ConfigDir" Name="MyConfig" /> 
    </Directory> 
</Directory> 

<SetDirectory Id="CDrive" Value="C:\" /> 

<ComponentGroup Id="EnvironmentSetup" Directory="ConfigDir" > 
    <Component Id="currentEnvironment_DEVELOPMENT" Guid="*" Permanent="yes" > 
     <Condition>ENV_DEPLOY="DEVELOPMENT"</Condition> 
     <File Id="ConfigFile_DEVELOPMENT" Source="DEVELOPMENT\currentEnvironment.config" /> 
    </Component> 
    <Component Id="currentEnvironment_PRODUCTION" Guid="*" Permanent="yes" > 
     <Condition>ENV_DEPLOY="PRODUCTION"</Condition> 
     <File Id="ConfigFile_PRODUCTION" Source="PRODUCTION\currentEnvironment.config" /> 
    </Component> 
</ComponentGroup> 
+0

我再说一次,** C:\ Config是一个系统文件夹**。这是Windows Installer的内部实现细节,绝不应该用于您自己的部署。事实上,勤奋的系统管理员已经知道这个文件夹的用途,并且知道在安装失败后,它有时会在完全废弃的回滚文件系统上“卡住” - 它们可能会使脚本清理整个文件夹,整个应用程序将会随着它一起消失。另外,Windows本身可能会在不发出警告的情况下对文件夹执行不可预知的操作。部署在别的地方真的很难吗? –

+0

我将配置更改为MyConfig – panpawel

+0

好得多 - 感谢收听,但如果您可以更改该文件夹,则也可以安装到[ProgramFilesFolder],这意味着您不再与Windows Installer设计对抗。安装后该文件夹是否为只读文件夹,还是您更改那里的文件? –

-1

我知道你只是想要一个答案,但请考虑其他解决方案选项。此构造与Windows Installer设计相抵触,我可以保证它会反击。这场战斗不值得。所有的Windows Installer都设计为不允许这种不寻常的(和不必要的)部署结构。必须有替代品。

为什么要访问C:\ Config文件夹?我们真的需要知道要理解你想达到的目标。这是Windows Installer引擎的内部系统文件夹。它通常为任何正在运行的MSI安装存储回滚文件我想不出任何理由在这个文件夹中做任何事情 - 这是不安全的。

+0

C:\ Config是内部应用程序使用的文件夹。如果您知道如何部署它,请提供解决方案。 – panpawel

+0

什么样的内部应用程序可以做到这一点?他们执行什么功能?我们必须知道为了理解这一点。 Windows Installer“积极抵制”部署到这样的文件夹 - 实际上不可能为如何做到这一点提供合理的建议,但我们可能会帮助确定是否有更好的方法来实现您想要的。给我们更多的信息,我相信我们会找到一个方法。 –

+0

@SteinÅsmul他只是为示例文件夹选择了一个可怜的名字。我不认为他正在访问任何“内部系统文件夹”,至少不是故意的。他只是想知道如何设置目录名称,因为a:在name属性中是不允许的。他的发布解决方案是否正确地使用SetDirectory? – Pete