如何识别 Wix 工具集中的当前登录用户?
How can i identify the current logon user in Wix toolset?
我正在尝试使用 Wix 构建安装程序,我必须将一个文件放入“启动”文件夹中。我已经找到了如何构建启动文件夹的路径,但我找不到任何可以识别当前用户的变量。
That's what i have done for now and it works but the part with the name of the user just creates a new directory with that name
这应该是在 运行 时在安装程序中自动设置的 属性,LogonUser。
您的想法可能有几处错误:
您不需要构建整个目录树来访问 StartupFolder,因为已经有一个名为 StartupFolder 的标准 Windows 安装程序 属性。这已经是当前用户启动文件夹的路径,所以不清楚为什么需要 LogonUser 的值。
属性通过将它们放在方括号中来解析,因此在 一般 情况下,您将使用 [LogonUser],但目录中的目录名称 table 未标记为格式化类型,因此调用目录 [LogonUser] 将不起作用。您需要将另一个 public 属性 设置为 [LogonUser] 的值,然后使用该 属性 作为目录名称。但是,我认为第 1 点可能就是您所需要的,并且您的目录树不清楚您的意图。
运行 启动时
通常您会在启动文件夹中放置一个文件的快捷方式,而不是实际文件。您可以通过参考内置 Windows 安装程序 属性 StartupFolder 来完成此操作,如下面的模型示例所示(如 Phil 所述)。
在替代领域,有很多方法可以安排从 Windows 开始的事情。 这是什么类型的文件,它有什么作用?如果您有兴趣,您可以通过 运行ning 查看用于在登录或启动时启动某些内容的多种方法AutoRuns(来自 SysInternals)。有一系列令人震惊的可能性(小题外话)。
通常您可以 运行 作为 服务 或 计划任务 ,而不是使用其他启动功能。通常为需要持续 运行 的功能提供服务,并为需要不时 运行 的东西安排任务。我认为大多数人都希望在登录时避免太多的事情 运行ning - 如果它们不是真的必要的话。我找到启动文件夹 "clunky" - 也容易受到用户干扰。
自我修复和启动文件夹
This Experts-Exchange article描述删除启动文件夹条目后触发自修复的情况(搜索"startup"找到该部分)。
坦率地说,我对所描述的场景感到有些惊讶。删除快捷方式后,它不应轻易自动恢复,因为它通常不是其托管组件的关键路径。尽管如此,当您测试 MSI 时还是要检查一些东西(删除快捷方式然后直接启动您的应用程序 - 如果有快捷方式可以这样做)。如果您发现问题,请告诉我们。
如果我猜到底发生了什么,他们可能已经在快捷方式文件夹中安装了一个实际文件并将其设置为关键路径(这似乎也是您正在尝试做的)。然后他们将其放在与广告快捷方式相同的功能层次结构中 - 相同功能或应用程序的顶级功能,或父功能 - 导致在调用广告快捷方式时始终调用自我修复,并且丢失文件在启动文件夹中检测到并随后进行自我修复。
题外话: 有点题外话,重点是请检查一下你的设置!这种问题确实会激怒您的用户 - 其原因往往会躲避他们的支持人员。
模型 WiX 示例
这是一个关于如何安装启动文件夹快捷方式的示例。请注意,启动文件夹的重定向取决于安装程序是按用户安装还是按计算机安装,如 MSDN 中所述:StartupFolder.
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="Startup Shortcut" Manufacturer="Someone" Version="0.0.1"
Language="1033" UpgradeCode="PUT-GUID-HERE">
<Package InstallScope="perMachine" Compressed="yes" />
<Media Id="1" Cabinet="my.cab" EmbedCab="yes" />
<UIRef Id="WixUI_Mondo" /> <!-- Just include a default setup GUI -->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="MyCompany" Name="Company">
<Directory Id="MyAPP" Name="MyApp">
<Component Feature="MyFeature">
<File Source="MyApp.exe" />
<!-- Set Advertise="no" to avoid advertised shortcut -->
<Shortcut Id="MyApp" Directory="StartupFolder" Name="MyApp"
Advertise="yes" />
</Component>
</Directory>
<Directory Id="StartupFolder" />
</Directory>
</Directory>
</Directory>
<Feature Id="MyFeature" Absent="disallow" />
<Property Id="MSIFASTINSTALL" Value="7" /> <!-- Tweak to install faster -->
</Product>
</Wix>
我正在尝试使用 Wix 构建安装程序,我必须将一个文件放入“启动”文件夹中。我已经找到了如何构建启动文件夹的路径,但我找不到任何可以识别当前用户的变量。
That's what i have done for now and it works but the part with the name of the user just creates a new directory with that name
这应该是在 运行 时在安装程序中自动设置的 属性,LogonUser。
您的想法可能有几处错误:
您不需要构建整个目录树来访问 StartupFolder,因为已经有一个名为 StartupFolder 的标准 Windows 安装程序 属性。这已经是当前用户启动文件夹的路径,所以不清楚为什么需要 LogonUser 的值。
属性通过将它们放在方括号中来解析,因此在 一般 情况下,您将使用 [LogonUser],但目录中的目录名称 table 未标记为格式化类型,因此调用目录 [LogonUser] 将不起作用。您需要将另一个 public 属性 设置为 [LogonUser] 的值,然后使用该 属性 作为目录名称。但是,我认为第 1 点可能就是您所需要的,并且您的目录树不清楚您的意图。
运行 启动时
通常您会在启动文件夹中放置一个文件的快捷方式,而不是实际文件。您可以通过参考内置 Windows 安装程序 属性 StartupFolder 来完成此操作,如下面的模型示例所示(如 Phil 所述)。
在替代领域,有很多方法可以安排从 Windows 开始的事情。 这是什么类型的文件,它有什么作用?如果您有兴趣,您可以通过 运行ning 查看用于在登录或启动时启动某些内容的多种方法AutoRuns(来自 SysInternals)。有一系列令人震惊的可能性(小题外话)。
通常您可以 运行 作为 服务 或 计划任务 ,而不是使用其他启动功能。通常为需要持续 运行 的功能提供服务,并为需要不时 运行 的东西安排任务。我认为大多数人都希望在登录时避免太多的事情 运行ning - 如果它们不是真的必要的话。我找到启动文件夹 "clunky" - 也容易受到用户干扰。
自我修复和启动文件夹
This Experts-Exchange article描述删除启动文件夹条目后触发自修复的情况(搜索"startup"找到该部分)。
坦率地说,我对所描述的场景感到有些惊讶。删除快捷方式后,它不应轻易自动恢复,因为它通常不是其托管组件的关键路径。尽管如此,当您测试 MSI 时还是要检查一些东西(删除快捷方式然后直接启动您的应用程序 - 如果有快捷方式可以这样做)。如果您发现问题,请告诉我们。
如果我猜到底发生了什么,他们可能已经在快捷方式文件夹中安装了一个实际文件并将其设置为关键路径(这似乎也是您正在尝试做的)。然后他们将其放在与广告快捷方式相同的功能层次结构中 - 相同功能或应用程序的顶级功能,或父功能 - 导致在调用广告快捷方式时始终调用自我修复,并且丢失文件在启动文件夹中检测到并随后进行自我修复。
题外话: 有点题外话,重点是请检查一下你的设置!这种问题确实会激怒您的用户 - 其原因往往会躲避他们的支持人员。
模型 WiX 示例
这是一个关于如何安装启动文件夹快捷方式的示例。请注意,启动文件夹的重定向取决于安装程序是按用户安装还是按计算机安装,如 MSDN 中所述:StartupFolder.
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="Startup Shortcut" Manufacturer="Someone" Version="0.0.1"
Language="1033" UpgradeCode="PUT-GUID-HERE">
<Package InstallScope="perMachine" Compressed="yes" />
<Media Id="1" Cabinet="my.cab" EmbedCab="yes" />
<UIRef Id="WixUI_Mondo" /> <!-- Just include a default setup GUI -->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="MyCompany" Name="Company">
<Directory Id="MyAPP" Name="MyApp">
<Component Feature="MyFeature">
<File Source="MyApp.exe" />
<!-- Set Advertise="no" to avoid advertised shortcut -->
<Shortcut Id="MyApp" Directory="StartupFolder" Name="MyApp"
Advertise="yes" />
</Component>
</Directory>
<Directory Id="StartupFolder" />
</Directory>
</Directory>
</Directory>
<Feature Id="MyFeature" Absent="disallow" />
<Property Id="MSIFASTINSTALL" Value="7" /> <!-- Tweak to install faster -->
</Product>
</Wix>