Docs: RemoteExecuteScript.exe



  • These are a bit sloppy notes on what exactly "RemoteExecuteScript.exe" does:

    • Let <CWD> be the RemoteExecuteScript.exe's parent dir.
    • Accepts --silent command line switch which has the effect:
      -- No output at all.
      -- Even no error messages.
      -- Afterwards, silent gets propagated to "FastExecuteScript.exe".
    • Out of current interest:
      -- Also accepts --remote.
      -- And --script, --server, --username, --password for use with --remote.
      -- Script can become "invalid" if it's remote but no script or no server specified.
    • Currently reasons for valid==false can be only related to --remote.
    • For non-remote scripts all generated files are placed into:
      <AppsDir> = <CWD>/appslocal
    • Looks if "<CWD>/project.xml" exists.
    • If not, terminates.
    • Reads "EngineVersion" element from "<CWD>/project.xml".
    • If "EngineVersion" cannot be read then terminates.
    • Generates a SID directory in the format:
      <SidDir> = SID<sha256x>
      where <sha256x> is first 8 characters of SHA256 hash of the entire "project.xml". On Windows the hash can be generated using:
      certutil -hashfile project.xml SHA256
      PowerShell snippet to extract only the hash string and get rid of the rest of the output:
      $(CertUtil -hashfile project.xml SHA256)[1] -replace " ",""
    • Directory for "FastExecuteScript.exe":
      <FullSidDir> = <AppsDir>/<ScriptName>/<SidDir>/engine
      where <ScriptName> is empty for unnamed local scripts.
    • If <FullSidDir> does not exist then proceeds to installation.
    • If it exists then runs "FastExecuteScript.exe" with the CWD set to <FullSidDir>.

    Installation:

    • Checks if this engine distribution package exists:
      <CWD>/engines/<EngineVersion>/engine.zip
    • If not, downloads package from the web server.
    • Deletes recursively entire temporary dir, if any:
      <TmpRootDir> = <AppsDir>/<ScriptName>/temp
    • Temporary directory for engine installation to be:
      <TmpDir> = <TmpRootDir>/engine
    • Unzips either newly downloaded or previously existing engine distro into <TmpDir>.
    • Checks if there is a previous installation which means there's some <SIDxxx> directory in <AppsDir> dir. If there are multiple such dirs, a single random one is taken as the previous installation dir:
      <PrevDir> = <AppsDir>/<ScriptName>/<SIDxxx>
    • Checks if there are any untracked files in the previous installation's subdir:
      <PrevDir>/engine
      Untracked files are those files not registered in:
      <PrevDir>/engine/filelist.txt
    • Copies all untracked files from <CWD> and all of its subdirs into <TmpDir> with directory structure prevented.
    • Saves all file names from the engine distro (obtained as file list from the archiver) to "filelist.txt" and:
      -- Adds file list file itself ("filelist.txt").
      -- Addes "project.xml".
      -- ! Does not add any untracked files, i.e. they remain untracked.
    • Copies "project.xml" from <CWD> to <TmpDir>.
    • Renames <TmpDir> dir to <SidDir>.
    • Deletes <PrevDir>.
    • In the end, runs "FastExecuteScript.exe" from the new <SidDir> dir with the CWD set to <FullSidDir>.

    I'll try to keep this up to date and in line with my current knowledge.