cmd/ps打开申请和点击打开申请有什么区别?

What is the difference between opening application by cmd/ps or by click?

我尝试在登录期间通过 cmd 或 powershell 将 mozilla firefox bookmarks/passwords 复制到新的 windows 配置文件中,而不复制整个 firefox 配置文件:脚本打开 firefox(创建配置文件), 关闭 firefox 并用旧书签覆盖创建的书签。

问题:
用户打开 firefox,此时 firefox 删除复制的 bookmarks/passwords 并创建新的。 如果用户手动打开和关闭 firefox,bookmarks/passwords 可以通过脚本复制,一切正常。

显然,Windows 在通过单击或通过 cmdlet / powershell 打开文件时处理文件的方式有所不同。

我尝试打开 firefox 的命令:
[PS] Start-Process "C:\Program Files\Mozilla Firefox\firefox.exe" -PassThru
[命令] start "" "C:\Program Files\Google\Chrome\Application\chrome.exe"
[命令] "C:\Program Files\Mozilla Firefox\firefox.exe"

如何模仿用户手动打开应用程序的打开方式?

此致

由于 shell 扩展名,您在技术上无法静态分析资源管理器如何打开某些内容,但这不太可能适用于 .exe 文件,所以让我们暂时忽略它。

cmd.exe和批处理文件如何启动进程? CreateProcess.

资源管理器如何启动文件? ShellExecuteEx 大多数时候。

也就是说,对于 .exe 文件,ShellExecuteEx 可能会附加到 %path% 和其他一些小东西,但最终它会调用 CreateProcess 到开始实际过程。

我认为您的问题出在其他地方,而不是 cmd.exe 和 Explorer 之间的区别。

  • 文件被锁定是因为有人(Firefox 仍然 运行?)打开了书签的句柄?
  • 可能是当前目录错误相关的问题?当前目录被Windows锁定,所以您无法通过删除来替换它。
  • Firefox 运行 更新任务由任务计划程序在登录期间与您的登录脚本同时启动?

您可以通过在启动进程之前将 UseShellExecute 设置为 $true 让 PowerShell 使用 ShellExecuteEx 但根据 它已经默认为真 (假设你的 PassThru 参数没有强制它为 false).