Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File Wix-有条件地将文件安装到C:\MyConfig文件夹_File_Wix_Windows Installer_Installation - Fatal编程技术网

File Wix-有条件地将文件安装到C:\MyConfig文件夹

File Wix-有条件地将文件安装到C:\MyConfig文件夹,file,wix,windows-installer,installation,File,Wix,Windows Installer,Installation,我想将Wix安装项目中的配置文件安装到C:drive的MyConfig文件夹中。 我很难在目录中指定C:\作为属性“Name”中不允许使用的字符“:” 我也希望有条件地安装文件,这样在卸载过程中不会被删除。 我知道你只是想要一个答案,但是请考虑其他解决方案选项。这种结构与Windows Installer的设计格格不入,我可以向你保证,它会反击的。这场战斗不值得。所有Windows Installer都设计为不允许这种不寻常(和不必要)的部署构造。必须有其他选择 为什么要访问C:\Config文

我想将Wix安装项目中的配置文件安装到C:drive的MyConfig文件夹中。 我很难在目录中指定C:\作为属性“Name”中不允许使用的字符“:”


我也希望有条件地安装文件,这样在卸载过程中不会被删除。

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


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

经过反复尝试,我找到了答案。我只需要简单地添加SetDirectory元素,它将覆盖我的C驱动器目录,就像这样

<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>

ENV_DEPLOY=“开发”
ENV_DEPLOY=“生产”

C:\Config是内部应用程序使用的文件夹。如果您知道如何部署到it,请提供解决方案。什么样的内部应用程序会这样做?它们执行什么功能?为了理解这一点,我们真的必须知道。Windows Installer“积极抵制”部署到这样的文件夹-确实不可能提供合理的建议,但我们可以帮助确定是否有更好的方法来实现您的目标。给我们更多的信息,我相信我们会找到办法的。@SteinÅsmul他刚刚为一个示例文件夹选择了一个糟糕的名字。我不认为他正在访问任何“内部系统文件夹”,至少不是故意的。他只是想知道如何设置目录名,因为name属性中不允许使用:。他发布的解决方案使用SetDirectory是正确的方法吗?不,用这种方法覆盖目录是不安全的,不推荐使用-副作用几乎是肯定的。而且这个文件夹是一个核心MSI文件夹,根本不应该被访问或写入。实际上,在其他人尝试做同样的事情之前,应该先删除上面的“解决方案”。我们是Windows安装专家-当我们警告人们错误的设计时,为什么人们不听?很难直接安装到C:\的原因是,首先不应该在那里安装任何东西。@SteinÅsmul在哪里可以找到MSI软件包安装的文件/文件夹?我已经开发了WPF应用程序,并使用WiX创建了MSI,带有默认设置,所以我需要找出MSI软件包安装的文件夹或文件。我再说一遍,C:\Config是一个系统文件夹。它是Windows Installer的内部实现详细信息,不应用于您自己的部署。事实上,勤奋的系统管理员知道此文件夹的用途,并且知道在安装失败后,它有时会“卡在”充满过时回滚文件的系统上-他们可能会编写脚本来清除整个文件夹,整个应用程序也会随之被破坏。此外,Windows本身可能会在没有警告的情况下对文件夹执行不可预知的操作。在其他地方部署有这么难吗?我将配置更改为MyConfigMuch更好-感谢您的收听,但是如果您可以更改该文件夹,您也可以改为安装到[ProgramFilesFolder],这将意味着您不再与Windows Installer设计抗衡。安装后文件夹是只读的,还是您更改了其中的文件?此设计中的错误:1)如果系统驱动器与“C:\”不同,安装程序将弹出。2) 将目录名绑定到变量不是一个好主意-可能会导致升级和修补问题。3) 安装程序不会安装到程序文件下的文件夹中。4) 安装程序以要安装的核心Windows系统文件夹为目标(稍后更改)。5) 将同一文件定位于不同版本的安装并不理想(请改用WiX的XML更新功能)。空间不足,无法发表更多评论-请不要使用这些设计。问题是肯定的。遵循基本规则。