harness code migration
diff --git a/src/main/cpp/harness/Makefile b/src/main/cpp/harness/Makefile
new file mode 100644
index 0000000..bef2334
--- /dev/null
+++ b/src/main/cpp/harness/Makefile
@@ -0,0 +1,103 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+#  Main targets can be executed directly, and they are:
+#  
+#     build                    build a specific configuration
+#     clean                    remove built files from a configuration
+#     clobber                  remove all built files
+#     all                      build all configurations
+#     help                     print help mesage
+#  
+#  Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
+#  .help-impl are implemented in nbproject/makefile-impl.mk.
+#
+# NOCDDL
+
+
+
+# Environment 
+MKDIR=mkdir
+CP=cp
+CCADMIN=CCadmin
+RANLIB=ranlib
+
+
+
+# build
+build: .build-post
+
+.build-pre: .build-pre-$(CONF)
+# Add your pre 'build' code here...
+
+.build-pre-app.exe: app.rc
+	windres -oapp.res -Ocoff app.rc
+
+.build-pre-app64.exe: app.rc
+	x86_64-w64-mingw32-windres.exe -oapp64.res -Ocoff app.rc
+
+.build-post: .build-impl
+# Add your post 'build' code here...	
+
+
+
+# clean
+clean: .clean-post
+
+.clean-pre:
+# Add your pre 'clean' code here...
+
+.clean-post: .clean-impl
+# Add your post 'clean' code here...
+
+
+
+# clobber
+clobber: .clobber-post
+
+.clobber-pre:
+# Add your pre 'clobber' code here...
+
+.clobber-post: .clobber-impl
+# Add your post 'clobber' code here...
+
+
+
+# all
+all: .all-post
+
+.all-pre:
+# Add your pre 'all' code here...
+
+.all-post: .all-impl
+# Add your post 'all' code here...
+
+
+
+# help
+help: .help-post
+
+.help-pre:
+# Add your pre 'help' code here...
+
+.help-post: .help-impl
+# Add your post 'help' code here...
+
+
+
+# include project implementation makefile
+include nbproject/Makefile-impl.mk
diff --git a/src/main/cpp/harness/Makefile.mingw b/src/main/cpp/harness/Makefile.mingw
new file mode 100644
index 0000000..5ef6f79
--- /dev/null
+++ b/src/main/cpp/harness/Makefile.mingw
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+all: app64.exe app.exe
+
+clean:
+	rm -f *.res *.exe
+
+app64.res: app.rc app.exe.manifest
+	x86_64-w64-mingw32-windres -oapp64.res -Ocoff -DMANIFEST_FILE=app.exe.manifest app.rc
+
+app64.exe: app.cpp applauncher.cpp app64.res ../../../platform/o.n.bootstrap/launcher/windows/utilsfuncs.cpp
+	x86_64-w64-mingw32-gcc -s -DNBEXEC_DLL='"/lib/nbexec64.dll"' -DARCHITECTURE=64 -Wl,--nxcompat -Wl,--dynamicbase -Wl,--no-seh app.cpp -mwindows applauncher.cpp app64.res ../../../platform/o.n.bootstrap/launcher/windows/utilsfuncs.cpp ../../../nb/ide.launcher/windows/nblauncher.cpp -I ../../../platform/o.n.bootstrap/launcher/windows/ -oapp64.exe -static -lstdc++ -static-libstdc++ -static-libgcc
+
+app.res: app.rc app.exe.manifest
+	i686-w64-mingw32-windres -oapp.res -Ocoff -DMANIFEST_FILE=app.exe.manifest app.rc
+
+app.exe: app.cpp applauncher.cpp app.res ../../../platform/o.n.bootstrap/launcher/windows/utilsfuncs.cpp
+	i686-w64-mingw32-gcc -s -DNBEXEC_DLL='"/lib/nbexec.dll"' -DARCHITECTURE=32 -Wl,--nxcompat -Wl,--dynamicbase -Wl,--no-seh -mwindows app.cpp applauncher.cpp app.res ../../../platform/o.n.bootstrap/launcher/windows/utilsfuncs.cpp ../../../nb/ide.launcher/windows/nblauncher.cpp -I ../../../platform/o.n.bootstrap/launcher/windows/ -oapp.exe -static -lstdc++ -static-libstdc++ -static-libgcc
+
diff --git a/src/main/cpp/harness/app.cpp b/src/main/cpp/harness/app.cpp
new file mode 100644
index 0000000..840c828
--- /dev/null
+++ b/src/main/cpp/harness/app.cpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ /*
+ * Author: Tomas Holy
+ */
+
+
+#include "applauncher.h"
+
+int main(int argc, char *argv[]) {
+    AppLauncher launcher;
+    return launcher.start(argc - 1, argv + 1);
+}
diff --git a/src/main/cpp/harness/app.exe.manifest b/src/main/cpp/harness/app.exe.manifest
new file mode 100644
index 0000000..26921b3
--- /dev/null
+++ b/src/main/cpp/harness/app.exe.manifest
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<assemblyIdentity version="9.0.0.0"
+   processorArchitecture="x86"
+   name="app.exe"
+   type="win32"/>
+
+<description>NBP application process</description>
+<dependency>
+  <dependentAssembly>
+    <assemblyIdentity
+      type="win32"
+      name="Microsoft.Windows.Common-Controls"
+      version="6.0.0.0"
+      processorArchitecture="*"
+      publicKeyToken="6595b64144ccf1df"
+      language="*"
+    />
+  </dependentAssembly>
+</dependency>
+<!-- Identify the application security requirements. -->
+<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
+  <security>
+    <requestedPrivileges>
+      <requestedExecutionLevel
+        level="asInvoker"
+        uiAccess="false"/>
+      </requestedPrivileges>
+     </security>
+</trustInfo>
+<!-- NETBEANS-1227: Indicate the same HiDPI capabilities as javaw.exe from JDK 11. -->
+<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
+  <asmv3:windowsSettings xmlns:dpi1="http://schemas.microsoft.com/SMI/2005/WindowsSettings" xmlns:dpi2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
+    <dpi1:dpiAware>true/PM</dpi1:dpiAware>
+    <dpi2:dpiAwareness>PerMonitorV2, PerMonitor, system</dpi2:dpiAwareness>
+  </asmv3:windowsSettings>
+</asmv3:application>
+<!-- List of explicitly supported Windows versions. This is the list from
+     javaw.exe on JDK 8.0.172, which is the same as that of JDK 11ea. -->
+<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+  <application>
+    <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
+    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
+    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+    <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+    <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
+  </application>
+</compatibility>
+</assembly>
diff --git a/src/main/cpp/harness/app.ico b/src/main/cpp/harness/app.ico
new file mode 100644
index 0000000..294cd70
--- /dev/null
+++ b/src/main/cpp/harness/app.ico
Binary files differ
diff --git a/src/main/cpp/harness/app.rc b/src/main/cpp/harness/app.rc
new file mode 100644
index 0000000..d52211e
--- /dev/null
+++ b/src/main/cpp/harness/app.rc
@@ -0,0 +1,26 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+
+#include <winuser.h>
+
+100 ICON "app.ico"
+
+// Value MANIFEST_FILE id taken from windres parameter -DMANIFEST_FILE
+CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST MANIFEST_FILE
diff --git a/src/main/cpp/harness/applauncher.cpp b/src/main/cpp/harness/applauncher.cpp
new file mode 100644
index 0000000..f816316
--- /dev/null
+++ b/src/main/cpp/harness/applauncher.cpp
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ /*
+ * Author: Tomas Holy
+ */
+
+#include "applauncher.h"
+#include "../../../platform/o.n.bootstrap/launcher/windows/utilsfuncs.h"
+#include "../../../platform/o.n.bootstrap/launcher/windows/argnames.h"
+
+using namespace std;
+
+const char *AppLauncher::OPT_DEFAULT_USER_DIR = "default_userdir=";
+const char *AppLauncher::OPT_DEFAULT_CACHE_DIR = "default_cachedir=";
+const char *AppLauncher::OPT_DEFAULT_OPTIONS = "default_options=";
+const char *AppLauncher::OPT_EXTRA_CLUSTERS = "extra_clusters=";
+const char *AppLauncher::OPT_JDK_HOME = "jdkhome=";
+const char *AppLauncher::APPNAME_TOKEN = "${APPNAME}";
+const char *AppLauncher::CACHE_SUFFIX = "\\Cache\\";
+
+AppLauncher::AppLauncher() {
+}
+
+AppLauncher::AppLauncher(const AppLauncher& orig) {
+}
+
+AppLauncher::~AppLauncher() {
+}
+
+bool AppLauncher::initBaseNames() {
+    if (!NbLauncher::initBaseNames()) {
+        return false;
+    }
+
+    string pattern = baseDir + "\\platform*";
+    WIN32_FIND_DATA fd = {0};
+    HANDLE hFind;
+    hFind = FindFirstFile(pattern.c_str(), &fd);
+    if (hFind == INVALID_HANDLE_VALUE) {
+        logErr(false, true, "Cannot find 'platform*' folder!");
+        return false;
+    }
+
+    do {
+        if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+                && fileExists((baseDir + '\\' + fd.cFileName + NbLauncher::NBEXEC_FILE_PATH).c_str())) {
+            platformDir = baseDir + '\\' + fd.cFileName;
+            break;
+        }
+    } while (FindNextFile(hFind, &fd));
+
+    FindClose(hFind);
+
+    if (platformDir.empty()) {
+        logErr(false, true, "Cannot find valid 'platform*' folder!");
+        return false;
+    }
+    return true;
+}
+
+bool AppLauncher::findUserDir(const char *str) {
+    logMsg("AppLauncher::findUserDir()");
+    if (!NbLauncher::findUserDir(str)) {    // will set userDir and possibly userHome.
+        return false;
+    }
+    int pos = userDir.find(APPNAME_TOKEN);
+    if (pos != string::npos) {
+        userDir.replace(pos, strlen(APPNAME_TOKEN), appName);
+    }
+    return true;
+}
+
+bool AppLauncher::findCacheDir(const char *str) {
+    logMsg("AppLauncher::findCacheDir");
+    if (!NbLauncher::findCacheDir(str)) {    // will set userDir and possibly userHome.
+        return false;
+    }
+    int pos = cacheDir.find(APPNAME_TOKEN);
+    if (pos != string::npos) {
+        cacheDir.replace(pos, strlen(APPNAME_TOKEN), appName);
+    }
+    return true;
+}
+
+const char * AppLauncher::getAppName() {
+    return appName.c_str();
+}
+
+void AppLauncher::addSpecificOptions(CmdArgs &args) {
+}
+
+void AppLauncher::adjustHeapSize() {
+}
+
+const char * AppLauncher::getDefUserDirOptName() {
+    return OPT_DEFAULT_USER_DIR;
+}
+
+const char * AppLauncher::getDefCacheDirOptName() {
+    return OPT_DEFAULT_CACHE_DIR;
+}
+
+const char * AppLauncher::getDefOptionsOptName() {
+    return OPT_DEFAULT_OPTIONS;
+}
+
+const char * AppLauncher::getExtraClustersOptName() {
+    return OPT_EXTRA_CLUSTERS;
+}
+
+const char * AppLauncher::getJdkHomeOptName() {
+    return OPT_JDK_HOME;
+}
+
+const char * AppLauncher::getCurrentDir() {
+    return baseDir.c_str();
+}
+
+std::string AppLauncher::constructApplicationDir(const std::string& dir, bool cache) {
+    if (cache) {
+        return dir + "\\" + getAppName() + CACHE_SUFFIX;
+    } else {
+        return dir + "\\" + getAppName() + "\\";
+    }
+}
diff --git a/src/main/cpp/harness/applauncher.h b/src/main/cpp/harness/applauncher.h
new file mode 100644
index 0000000..0801c8a
--- /dev/null
+++ b/src/main/cpp/harness/applauncher.h
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ /*
+ * Author: Tomas Holy
+ */
+
+#ifndef _APPLAUNCHER_H
+#define	_APPLAUNCHER_H
+
+#include <string>
+#include <windows.h>
+
+#include "shlobj.h"
+#include "../../../nb/ide.launcher/windows/nblauncher.h"
+
+class AppLauncher : public NbLauncher {
+
+    static const char *OPT_DEFAULT_USER_DIR;
+    static const char *OPT_DEFAULT_CACHE_DIR;
+    static const char *OPT_DEFAULT_OPTIONS;
+    static const char *OPT_EXTRA_CLUSTERS;
+    static const char *OPT_JDK_HOME;
+    static const char *APPNAME_TOKEN;
+    static const char *REG_APPDATA_NAME;
+    static const char *CACHE_SUFFIX;
+
+public:
+    AppLauncher();
+    virtual ~AppLauncher();
+
+protected:
+    virtual bool initBaseNames();
+    virtual const char * getAppName();
+    virtual void addSpecificOptions(CmdArgs &args);
+    virtual void adjustHeapSize();
+    virtual bool findUserDir(const char *str);
+    virtual bool findCacheDir(const char *str);
+    virtual const char * getDefUserDirOptName();
+    virtual const char * getDefCacheDirOptName();
+    virtual const char * getDefOptionsOptName();
+    virtual const char * getExtraClustersOptName();
+    virtual const char * getJdkHomeOptName();
+    virtual const char * getCurrentDir();
+    virtual std::string constructApplicationDir(const std::string& dir, bool cache);
+
+private:
+    AppLauncher(const AppLauncher& orig);
+};
+
+#endif	/* _NBLAUNCHER_H */
+
diff --git a/src/main/cpp/harness/nbproject/configurations.xml b/src/main/cpp/harness/nbproject/configurations.xml
new file mode 100644
index 0000000..55d0647
--- /dev/null
+++ b/src/main/cpp/harness/nbproject/configurations.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<configurationDescriptor version="84">
+  <logicalFolder name="root" displayName="root" projectFiles="true" kind="ROOT">
+    <logicalFolder name="HeaderFiles"
+                   displayName="Header Files"
+                   projectFiles="true">
+      <itemPath>applauncher.h</itemPath>
+      <itemPath>../../../nb/ide.launcher/windows/nblauncher.h</itemPath>
+      <itemPath>../../../platform/o.n.bootstrap/launcher/windows/utilsfuncs.h</itemPath>
+    </logicalFolder>
+    <logicalFolder name="ResourceFiles"
+                   displayName="Resource Files"
+                   projectFiles="true">
+    </logicalFolder>
+    <logicalFolder name="SourceFiles"
+                   displayName="Source Files"
+                   projectFiles="true">
+      <itemPath>app.cpp</itemPath>
+      <itemPath>applauncher.cpp</itemPath>
+      <itemPath>../../../nb/ide.launcher/windows/nblauncher.cpp</itemPath>
+      <itemPath>../../../platform/o.n.bootstrap/launcher/windows/utilsfuncs.cpp</itemPath>
+    </logicalFolder>
+    <logicalFolder name="ExternalFiles"
+                   displayName="Important Files"
+                   projectFiles="false">
+      <itemPath>Makefile</itemPath>
+    </logicalFolder>
+  </logicalFolder>
+  <projectmakefile>Makefile</projectmakefile>
+  <confs>
+    <conf name="app.exe" type="1">
+      <toolsSet>
+        <remote-sources-mode>LOCAL_SOURCES</remote-sources-mode>
+        <compilerSet>Cygwin|Cygwin</compilerSet>
+      </toolsSet>
+      <compileType>
+        <cTool>
+          <developmentMode>5</developmentMode>
+        </cTool>
+        <ccTool>
+          <developmentMode>5</developmentMode>
+          <architecture>1</architecture>
+          <commandLine>-mno-cygwin</commandLine>
+          <preprocessorList>
+            <Elem>ARCHITECTURE=32</Elem>
+            <Elem>NBEXEC_DLL="/lib/nbexec.dll"</Elem>
+          </preprocessorList>
+        </ccTool>
+        <fortranCompilerTool>
+          <developmentMode>5</developmentMode>
+        </fortranCompilerTool>
+        <linkerTool>
+          <output>../release/launchers/app.exe</output>
+          <linkerLibItems>
+            <linkerOptionItem>app.res</linkerOptionItem>
+          </linkerLibItems>
+          <commandLine>-mwindows</commandLine>
+        </linkerTool>
+      </compileType>
+    </conf>
+    <conf name="app64.exe" type="1">
+      <toolsSet>
+        <remote-sources-mode>LOCAL_SOURCES</remote-sources-mode>
+        <compilerSet>Cygwin64|Cygwin</compilerSet>
+      </toolsSet>
+      <compileType>
+        <cTool>
+          <developmentMode>5</developmentMode>
+        </cTool>
+        <ccTool>
+          <developmentMode>5</developmentMode>
+          <architecture>2</architecture>
+          <commandLine>-mno-cygwin -static-libgcc -static-libstdc++</commandLine>
+          <preprocessorList>
+            <Elem>ARCHITECTURE=64</Elem>
+            <Elem>NBEXEC_DLL="/lib/nbexec64.dll"</Elem>
+          </preprocessorList>
+        </ccTool>
+        <fortranCompilerTool>
+          <developmentMode>5</developmentMode>
+        </fortranCompilerTool>
+        <linkerTool>
+          <output>../release/launchers/app64.exe</output>
+          <linkerLibItems>
+            <linkerOptionItem>app64.res</linkerOptionItem>
+          </linkerLibItems>
+          <commandLine>-mwindows</commandLine>
+        </linkerTool>
+      </compileType>
+    </conf>
+  </confs>
+</configurationDescriptor>
diff --git a/src/main/cpp/harness/nbproject/project.properties b/src/main/cpp/harness/nbproject/project.properties
new file mode 100644
index 0000000..2456923
--- /dev/null
+++ b/src/main/cpp/harness/nbproject/project.properties
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
diff --git a/src/main/cpp/harness/nbproject/project.xml b/src/main/cpp/harness/nbproject/project.xml
new file mode 100644
index 0000000..34dd422
--- /dev/null
+++ b/src/main/cpp/harness/nbproject/project.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.cnd.makeproject</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/make-project/1">
+            <name>Platform App Launcher Win</name>
+            <make-project-type>0</make-project-type>
+            <c-extensions/>
+            <cpp-extensions>cpp</cpp-extensions>
+            <header-extensions>h</header-extensions>
+            <sourceEncoding>UTF-8</sourceEncoding>
+            <make-dep-projects/>
+            <sourceRootList/>
+            <confList>
+                <confElem>
+                    <name>app.exe</name>
+                    <type>1</type>
+                </confElem>
+                <confElem>
+                    <name>app64.exe</name>
+                    <type>1</type>
+                </confElem>
+            </confList>
+        </data>
+    </configuration>
+</project>