IJPL-174294 Remote Dev: use jetbrains_client64.exe to run JetBrains Client process from a full IDE on Windows

This is needed to show the special icon for the application in that case. Updating the icon at runtime doesn't update it in the task bar.

GitOrigin-RevId: 7487cc2fb4dd74e174329a6e5d57a730727fe236
This commit is contained in:
Nikolay Chashnikov
2026-02-14 00:15:05 +01:00
committed by intellij-monorepo-bot
parent 5fa3342204
commit c19af13f06
2 changed files with 15 additions and 3 deletions

View File

@@ -21,6 +21,8 @@
description="Specify a positive value to make a client process started from an IDE listen for debug connections on that port."/>
<registryKey key="rdct.embedded.client.debug.suspend" defaultValue="false"
description="Enable this option to suspend a client process started from an IDE until a debugger connects to it."/>
<registryKey key="rdct.embedded.client.prefer.jetrains_client64.exe" defaultValue="true"
description="Disable this option to start JetBrains Client process on Windows from a full IDE using the IDE's launcher instead of a special jetbrains_client64.exe launcher."/>
<registryKey key="rdct.use.native.client.launcher.on.linux" defaultValue="true"
description="If enabled, the native launcher is used to run JetBrains Client process on Linux instead of jetbrains_client.sh script"/>
</extensions>

View File

@@ -98,7 +98,7 @@ class EmbeddedClientLauncher private constructor(private val moduleRepository: R
}
fun launch(url: String, extraArguments: List<String>, lifetime: Lifetime, errorReporter: EmbeddedClientErrorReporter): Lifetime {
val launcherData = createLauncherViaIdeExecutable() ?: findOldJetBrainsClientLauncher()
val launcherData = findCustomClientLauncher() ?: createLauncherViaIdeExecutable() ?: findOldJetBrainsClientLauncher()
if (launcherData != null) {
LOG.debug("Start embedded client using launcher")
val workingDirectory = Path(PathManager.getHomePath())
@@ -178,12 +178,22 @@ class EmbeddedClientLauncher private constructor(private val moduleRepository: R
return JetBrainsClientLauncherData(executable, listOf(executable.pathString))
}
private fun findCustomClientLauncher(): JetBrainsClientLauncherData? {
if (OS.CURRENT == OS.Windows && Registry.`is`("rdct.embedded.client.prefer.jetrains_client64.exe")) {
//prefer a special launcher for JetBrains Client if it exists to ensure that the special 'remote' icon will be used for the application
return PathManager.findBinFile("jetbrains_client64.exe")?.let {
JetBrainsClientLauncherData(it, listOf(it.pathString))
}
}
return null
}
private fun findOldJetBrainsClientLauncher(): JetBrainsClientLauncherData? {
return when (OS.CURRENT) {
OS.macOS -> {
return null
null
}
OS.Windows -> PathManager.findBinFile("jetbrains_client64.exe")?.let {
OS.Windows -> PathManager.findBinFile("jetbrains_client64.exe")?.let {
JetBrainsClientLauncherData(it, listOf(it.pathString))
}
else -> PathManager.findBinFile("jetbrains_client.sh")?.let {