"""Guard install.ps1's Studio launcher against the AV-heuristic shape (Kaspersky HEUR:Trojan.VBS.Agent.gen): a WScript .vbs spawning a hidden ExecutionPolicy-Bypass PowerShell. The shortcut must stay windowless via powershell.exe -WindowStyle Hidden over launch-studio.ps1, never a .vbs/WScript.Shell.Run wrapper, and any pre-existing .vbs must be deleted on upgrade.""" import re from pathlib import Path import pytest REPO_ROOT = Path(__file__).resolve().parents[3] INSTALL_PS1 = REPO_ROOT / "install.ps1" def _text() -> str: return INSTALL_PS1.read_text(encoding = "utf-8") def test_install_ps1_present(): assert INSTALL_PS1.is_file(), f"missing {INSTALL_PS1}" def test_no_vbs_launcher_generated(): text = _text() # No here-string building a .vbs body, no .vbs written (legacy cleanup checked separately). assert "$vbsContent" not in text, ( "install.ps1 must not generate a launch-studio.vbs: a WScript.Shell .vbs " "spawning a hidden ExecutionPolicy-Bypass PowerShell is the exact shape " "VBS-dropper heuristics flag (Kaspersky HEUR:Trojan.VBS.Agent.gen)." ) assert 'CreateObject("WScript.Shell")' not in text assert "shell.Run" not in text assert not re.search(r"Set-Content\s+-LiteralPath\s+\$launcherVbs", text) assert "//B //Nologo" not in text def test_legacy_vbs_removed_on_upgrade(): # An upgrade must DELETE a pre-existing launch-studio.vbs, not just stop generating it, # or AV keeps flagging the stale file. text = _text() assert re.search( r"Remove-Item\s+-LiteralPath\s+\$legacyLauncherVbs", text ), "upgrades must remove a pre-existing launch-studio.vbs so AV stops flagging it" def test_shortcut_target_is_not_wscript(): # The .lnk must not launch through wscript.exe (the VBS script host). text = _text() assert "wscript.exe" not in text.lower() def test_launcher_is_windowless_powershell(): # The shortcut runs powershell.exe -WindowStyle Hidden over launch-studio.ps1. text = _text() assert re.search( r"-WindowStyle\s+Hidden", text ), "the launcher must run powershell.exe with -WindowStyle Hidden over launch-studio.ps1." assert "launch-studio.ps1" in text if __name__ == "__main__": raise SystemExit(pytest.main([__file__, "-v"]))