> For the complete documentation index, see [llms.txt](https://chaoses-ib.gitbook.io/directory-opus/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chaoses-ib.gitbook.io/directory-opus/guan-fang-shou-ce/readme.zh-6/readme.zh-1/readme.zh/launch_options.zh.md).

# 启动选项

当你在 [自定义](/directory-opus/guan-fang-shou-ce/readme.zh-6.md) 模式下将程序（或程序快捷方式）拖至工具栏以为运行该程序创建按钮时，就会显示“启动选项”对话框。它允许你在单击按钮时选择如何启动程序。例如，你可能希望通过使用工具栏作为启动器单独运行程序，或者可能需要将所选文件传递给程序，以便按钮成为在特定程序中编辑文件的一种方式。

“启动选项”对话框不会影响 Directory Opus 本身的启动方式。对此，请参阅 [配置/启动 Opus](/directory-opus/guan-fang-shou-ce/readme.zh-5/readme.zh/readme.zh-12.md)

如果你正在编辑工具栏，并将 .exe 文件（或其快捷方式）拖放到其中，你就会看到类似这样的对话框：

![](https://3597805814-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3XSZSwWow0fDf6fQJobd%2Fuploads%2Fgit-blob-a45c6486c875f485dc79ab152f2274d950a993ff%2Flaunch_options.png?alt=media)

*如果没有*看到该对话框，可能是以下原因之一：

* 你不在 [自定义](/directory-opus/guan-fang-shou-ce/readme.zh-6.md) 模式下。

你需要在自定义模式下才能编辑工具栏。在自定义模式外，将文件拖放到工具栏上可以让你将文件发送到按钮，而不是创建新按钮。

* 你之前曾在“启动选项”对话框中选择了 **始终使用这些设置**。 按住 Ctrl，同时将程序拖放到工具栏上以覆盖它，并使对话框出现。
* 你拖动的内容不是可执行文件（.exe 文件）或其快捷方式。
* 你拖动的是 MSI 快捷方式或类似内容，它只间接运行程序。MSI 快捷方式在启动程序之前会执行额外的工作，例如检查程序是否已安装且为最新版本，并且会按原样保留。你通常可以找到程序的主 .exe 并将其拖放到工具栏上。

“启动选项”对话框提供了我们在为程序创建按钮时认为最有可能需要的选项，并且会在无需深入了解 Opus 命令和按钮如何工作的基础上为你构建按钮。该对话框并未涵盖所有可能的情况，并且无意取代完整的 [命令编辑器](/directory-opus/guan-fang-shou-ce/readme.zh-6/readme.zh-1/readme.zh-1.md)。该对话框生成的工具栏按钮与其它按钮相同，并且可以在之后根据需要对其进行编辑。

该对话框还提供了一个简单的界面，用于测试你为所创建按钮的特定程序选择的选项是否有效。每个程序可能不同，并且需要不同的事项。例如，某些编辑器一次只允许你指定一个文件，并且需要你再次运行它们才能处理第二个文件；其它编辑器允许你一次指定所有文件，以便在标签页视图中打开它们。支持标签页视图的编辑器可能仍然一次只允许将其一件事发送给它们，但通常会在再次运行时检查它们是否已经运行，并将新文件传递给程序的现有实例，以便它打开一个新的标签页。Opus 无法知道给定程序需要什么，你通常会查看程序的文档来了解，但你也可以在“启动选项”对话框中尝试不同的内容来查看哪些内容有效。

最后，该对话框有一个 **将选项用于将来的按钮** 复选框，它允许你选择特定的设置，然后在将新程序拖放到工具栏上时始终使用它们。如果你将工具栏用作启动器并对其进行了大量编辑，这可能会为你节省一些时间。

### 对话框选项

该对话框的主要选项如下：

* **默认值** 单击“默认值”按钮将把对话框顶部的选项重置为默认值。
* **将文件和文件夹发送到程序** 如果你希望按钮能够启动程序并同时向其传递文件或文件夹以查看、编辑或执行其它操作，请开启此选项。如果你希望按钮仅仅自己启动程序，并且忽略任何选定的文件或文件夹，请关闭此选项。

  为简洁起见，我们通常在下面讨论文件，但除非使用选项仅将其限制为其中之一，否则通常适用于文件夹。
* **仅通过拖放** 如果你希望单击按钮忽略所选文件并仅自己启动程序，但想保留通过将文件拖放到按钮上来将文件传递给程序的能力，请开启此选项。
* **仅限文件** 如果你希望程序在被单击时仅处理所选文件并忽略所选文件夹，请开启此选项。请注意，这不会影响拖放，拖放不会在传递给程序时过滤拖放到按钮上的内容。
* **仅限文件夹** 与 **仅限文件** 选项相同，只不过按钮单击会忽略文件，而仅处理文件夹。拖放也会忽略此选项。
* **需要文件/文件夹** 如果你希望按钮仅在文件传递给它时执行某些操作，并且如果你在什么也没选中的情况下单击按钮，则永远不想单独运行程序，请开启此选项。
* **将所有内容发送在一行中** 当你单击按钮时，如果选择了多个文件，则有两种可能性：

  如果此选项开启，程序将只运行一次，其中所有选定文件都以单行规定，一个接一个。

  如果此选项关闭，程序将针对每个选定文件运行一次，并且每个命令行一次只提供一个文件。

  如果程序支持，则一次发送所有文件通常更好，但许多程序不支持。
* **单击按钮后取消选择文件和文件夹** 如果此选项开启，则按钮完成后，任何传递给程序的文件或文件夹都将被取消选择，如果关闭，则保留选定状态。

  （除非 [**配置/文件操作/选项/取消选择功能中使用的文件**](/directory-opus/guan-fang-shou-ce/readme.zh-5/readme.zh/readme.zh-4/options.zh.md) 关闭，在这种情况下，该选项无效，并且取消选择永远不会自动进行。）
* **将当前目录作为第一个参数传递** 你可能希望对当前文件夹而不是其下方的任何选定文件或文件夹运行某些程序。或者你可能希望将当前文件夹作为参数传递，然后输入任何选定文件或文件夹的路径。如果你希望执行这两种操作中的任何一种，请开启此选项。
* **异步** 如果此选项开启，Opus 将不会等待程序完成。如果你自己启动程序或者只使用一个文件或使用一行中的所有文件启动程序，那么此选项无关紧要。但是，如果你正在通过为每个文件运行程序一次的方式将多个文件发送给程序，则此选项会产生很大影响。

  当选项开启时，Opus 将不会等待程序并会并行运行程序的多个实例。根据程序的不同，这可能会导致一次出现多个窗口，每个文件一个窗口，或者可能导致出现一个窗口来显示所有文件。（或者，如果程序编写得不太好，则会出现两者兼有的情况。）

  请注意，窗口或文件打开的顺序看起来可能是随机的，因为程序的不同实例都在相互竞争；稍后启动的实例可能会赶上稍早启动的实例。 当选项关闭时，Opus 将为一个文件运行程序，然后等待它退出后再为下一个文件运行它。这也可能导致出现进度对话框。（你可以在创建按钮后编辑按钮，向该命令添加 **@noprogress**，以此阻止这种情况。）

请注意，Opus 仅等待 Opus 运行的程序实例。如果你在单击按钮之前程序已经在运行，那么用一个新文件再次运行它可能意味着启动了一个新的实例，它将注意到现有实例，并把该文件传递给它，然后退出。原始实例仍在运行，现在有该文件，而 Opus 运行的实例已经退出，Opus 将继续执行下一个文件。如果你只是使用按钮将文件发送到程序，而不会在之后对文件执行任何操作，那么这通常是你想要的结果。

* **开始于** 此选项指定程序启动所用的*当前目录*。在完整的按钮编辑器中，你可以指定任意文件夹路径，但在此对话框中你只有以下选项：

  ```
    * **当前文件夹（最不安全）：**作为当前目录的是文件窗口当前所在的文件夹，它通常与选定文件所在的文件夹相同。<WRAP>
  ```

  某些程序需要此模式，尤其是当文件不是自包文件并依赖于同一文件夹中的其它文件时。程序通常不应该要求这样做，因为它们会获得每个文件的完整路径，并且可以自行确定在何处查找伴随文件，但并非所有程序都编写入佳。

  除非你正在运行的程序需要此模式，否则你不应该使用此模式，因为它不安全。它让你面临一种称为*DLL 植入*的攻击，在其中，许多程序很容易被诱骗加载和运行放置在你要求它们打开的文件的同一文件夹中的 DLL 中的代码。如果你知道文件的来源，那么这不会构成很大风险，但它可能会对来自互联网的压缩包文件构成风险。例如，如果你下载并解压缩一个满是猫照片的 zip 压缩包文件，你可能不会注意到 JPEG 中潜伏着奇怪的 DLL，并且使用该 DLL 在当前目录中运行一个程序可能会导致程序运行 DLL 中的代码，然后它可以执行任何操作。

  ```
  * **程序的文件夹（默认）：**在运行程序时，程序的 .exe 文件的位置被用作当前目录。<WRAP>
  ```

这是默认选项，并且通常是安全的，除非程序本身位于你无法控制的文件夹中（但在这种情况下，你无法信任程序本身）。

一些程序需要此模式，因为它们通过当前目录查找它们的其它组件，而不是相对于其 .exe 文件的位置查找。程序通常不应该要求这样做，但一些程序编写不佳，并且此缺陷会影响很多软件。\</WRAP>

```
  * **System32 文件夹：**C:\Windows\System32 文件夹（或同等位置）用作当前目录。<WRAP>
```

在避免*DLL 植入*方面，这是最安全的选择，因为如果程序尝试从当前目录加载 Windows DLL，它通常会获得正确的 DLL 而不是模拟 DLL。

但是，并非所有程序都能使用此模式，并且它通常不比使用程序自己的文件夹作为当前目录更安全。

请注意，如果程序尝试在当前文件夹中创建随机文件或对当前文件夹执行破坏性操作，那么你绝对不想通过 System32 运行它，因为它可能会破坏你的系统。当然，Windows UAC 通常会保护你免受此问题的影响，除非你已将其关闭或以提升权限运行该程序。\</WRAP>

如果 **允许快捷方式覆盖** 复选框处于选中状态，则意味着当一个程序的快捷方式被拖放到工具栏上时，Opus 将使用快捷方式指定的*开始于*目录。这通常是一个好主意，因为如果快捷方式指定程序需要从特定文件夹中运行，那么它通常有充分的理由。拖放程序本身，或拖放未指定*开始于*文件夹的快捷方式时，此复选框没有任何直接影响，但请记住，启动选项对话框用于配置新按钮的默认设置以及设置单个按钮。\</WRAP>

* **为将来的按钮使用选项** 此对话框始终记住你上次出现时使用的设置，但是你可以打开此选项，以使其自动使用那些设置，而无需完全出现。如果你这样做，你可以按住 Ctrl，同时拖放一个程序以关闭该选项，并再次使对话框出现。

### 命令预览和测试按钮

* 对话框的 **命令预览** 部分允许你查看并测试上面选项产生的命令。 测试很重要，因为不同的程序需要不同的选项，并且唯一了解的方法是尝试它们或阅读其它程序的手册。
* **生成命令** 字段是只读的，仅仅是让你更好地了解选项的作用，以及帮助你习惯 Opus 命令的样子，如果你想进行更详细的按钮编辑的话。
* **测试项目** 列表允许你向其中添加任何文件或文件夹，以便在测试命令时使用。 你可以使用列表上方的按钮向其中添加内容，也可以将内容拖放到其中。添加一个项目后，你可以双击它通过文件选择器对其进行编辑，或单击它（已经选定的情况下）使用键盘对其路径进行编辑。

  此列表会在每次使用之间记住测试文件列表，并且可以使用其上方的最右侧按钮快速清除整个列表。

  请注意，此列表中的选定项目不会影响按钮。你可以选择列表中的项目以删除或编辑它们，但这只是此处选择所有。当我们在上面讨论*选定文件*时，我们只指在正常运行按钮时在文件窗口的文件夹标签页中选定的文件。
* **测试运行** 按钮将根据当前设置运行程序，就像单击已完成的按钮一样。 如果合适的话，**测试项目** 列表中的文件和文件夹将被传递给程序。

  如果 **测试运行** 按钮被禁用，这意味着你在没有向测试项目列表中添加任何文件/文件夹的情况下选择了 **需要文件/文件夹**，或者类似情况。

### 完成新按钮

* 如果你单击 **确定**，新按钮将根据你已指定的选项进行配置。 如果 **始终使用这些设置**（如上文详细讨论）处于启用状态，那么下次将程序拖放到工具栏上时将使用这些设置，除非你按住 **Ctrl**。
* 如果相反单击 **取消**，则新按钮将被删除。
* 无论选择哪种选项，你仍将处于自定义模式，并且对工具栏所做的更改不会保存到磁盘，直到你最终选择单击确定自定义对话框，或单击取消以还原自进入自定义模式后所做的任何工具栏更改。
* 如果在启动选项对话框仍处于打开状态时，你关闭工具栏（或它所在的窗口）或单击自定义对话框中的确定，则按钮将被保留，但处于默认状态，不包含你的任何更改。如果你意外执行了此操作，最简单的方法是删除该按钮并将程序再次拖放到工具栏上。
