如何从 Visual Studio 2010 安装程序运行 schtasks.exe?

Posted

技术标签:

【中文标题】如何从 Visual Studio 2010 安装程序运行 schtasks.exe?【英文标题】:How to run schtasks.exe from Visual Studio 2010 installer? 【发布时间】:2014-01-14 11:21:02 【问题描述】:

我有一个包含多个 C++ 项目的 Visual Studio 2010 解决方案和一个 Windows 安装程序项目。

安装程序主要用于安装部署目录、应用程序和各种快捷方式。我希望安装程序做的最后一件事是在 Windows 任务计划程序中安装几个任务。

我可以从命令行运行 schtask.exe,它工作正常。我想我可以将这个相同的命令复制到安装程序中的 CustomAction 中。但是,这不起作用,安装失败并显示消息“此 Windows 安装程序包存在问题。无法运行此安装所需的程序...”

我已将系统文件夹添加到文件系统设置中,并在 CustomActions 中的 Commit 节点下添加了一个 CustomAction。

CustomAction sourcePath 属性指向 C:\Windows\System32\schtasks.exe,Arguments 属性为 "/create /tn ""WiwoCLLauncher"" /tr C:\ECS\WiwoCLLauncher.exe /sc ONSTART"

谁能提供一些关于如何从 VS2010 安装程序运行 schtasks.exe 的见解?

【问题讨论】:

您始终可以创建一个包含在安装程序中的小型可执行文件,就像这篇知识库文章描述的那样:support.microsoft.com/kb/827018 我觉得它很难看,但它可能会起作用。 您是否将自定义操作的InstallClass 属性设置为“False”? 或者,您可以使用任务计划程序托管包装器来创建真正的自定义操作来计划您的任务。 taskscheduler.codeplex.com @jessehouwing - 是的,我已将“InstallClass”设置为“False”。我也考虑过小型可执行选项 - 但只是认为这很丑陋,应该有一种方法可以直接通过安装程序执行此操作。我认为 Managed Wrapper 将需要安装 .Net 支持,它目前不需要,所以我想避免这种情况。我会检查两个链接,谢谢! 由于它是一个托管包装器,您可以直接从您的 c++ 项目中调用非托管代码 :) 他们的调用都在这里:taskscheduler.codeplex.com/SourceControl/latest#TaskService/V2/… 【参考方案1】:

CustomAction sourcePath 属性指向 C:\Windows\System32\schtasks.exe

做你希望它做的事。安装项目构建器实际上会将您机器中的 schtasks.exe 包含到 MSI 文件中。并将尝试将其部署到目标机器上。幸运的是,Windows 文件系统保护功能可以防止您破坏用户的操作系统。但确实会让您安装失败。

设置构建器没有为您提供足够的灵活性来阻止构建器执行此操作。从技术上讲,您可以在之后使用 Orcas 编辑 MSI 文件(删除部署项并将自定义操作类型从 2 更改为 34),但这会变得相当痛苦。只要你想坚持使用 VS 构建器,那么做考虑编写一点点 C# 代码,使用 Process.Start() 来运行命令。

【讨论】:

无赖。我真的不想使用任何 C#,因为它想要引入目标系统上其他任何东西都不需要的 .Net 运行时。我正在查看这个 C++ 示例:msdn.microsoft.com/en-us/library/windows/desktop/… 作为要运行的独立应用程序。 VBScript 或 JScript 也被支持。

以上是关于如何从 Visual Studio 2010 安装程序运行 schtasks.exe?的主要内容,如果未能解决你的问题,请参考以下文章

visual studio 2010不能正确安装,急求

如何在 Visual Studio 2010 中使用互斥锁

电脑里的visual studio 2010怎么打开

通过开始调试 (F5) 从 Visual Studio 2010 使用 InstallUtil 安装 Windows 服务

如何在Visual Studio 2010中创建Crystal Reports [关闭]

如何在 Visual Studio 2010 中使用 Crystal Reports 创建报表