--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -286,6 +286,10 @@
             $<$<STREQUAL:${USE_ACCEL},opencl>:OpenCL::OpenCL>)
 endif ()
 
+if(WIN32)
+  target_link_libraries(dbcsr PRIVATE ws2_32)
+endif()
+
 # =================================================================================================
 # DBCSR's C API
 if (WITH_C_API)
@@ -324,6 +328,7 @@
 install(
   TARGETS dbcsr
   EXPORT DBCSRTargets
+  RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
   LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
   ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
 # See https://gitlab.kitware.com/cmake/cmake/-/issues/19608
@@ -342,6 +347,7 @@
     TARGETS dbcsr_c
     EXPORT DBCSRTargets
     COMPONENT C
+    RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
     LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
     ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
   install(
--- a/src/base/dbcsr_machine.F
+++ b/src/base/dbcsr_machine.F
@@ -15,7 +15,7 @@
                           int_8
    USE dbcsr_machine_internal, ONLY: &
       m_abort, m_chdir, m_flush_internal => m_flush, m_getarg, m_getcwd, m_getlog, m_getpid, &
-      m_hostnm, m_iargc, m_memory, m_memory_details, m_memory_max, m_mov, m_procrun
+      m_hostnm, m_iargc, m_memory, m_memory_details, m_memory_max, m_mov
 
 !$ USE OMP_LIB, ONLY: omp_get_wtime
 
@@ -33,7 +33,7 @@
    PRIVATE
 
    PUBLIC :: m_walltime, m_datum, m_flush, m_flush_internal, &
-             m_hostnm, m_getcwd, m_getlog, m_getpid, m_getarg, m_procrun, &
+             m_hostnm, m_getcwd, m_getlog, m_getpid, m_getarg, &
              m_memory, m_iargc, m_abort, m_chdir, m_mov, m_memory_details, &
              m_energy, m_memory_max, m_cpuinfo
 
--- a/src/base/dbcsr_machine_posix.f90
+++ b/src/base/dbcsr_machine_posix.f90
@@ -19,7 +19,7 @@
   PUBLIC :: m_flush, m_memory, &
             m_hostnm, m_getcwd, m_getlog, m_getpid, m_getarg, &
             m_iargc, m_abort, m_chdir, m_mov, &
-            m_memory_details, m_procrun
+            m_memory_details
 
   INTEGER(KIND=int_8), PUBLIC, SAVE :: m_memory_max = 0
 
@@ -49,34 +49,6 @@
      FLUSH (lunit)
   END SUBROUTINE m_flush
 
-  FUNCTION m_procrun(pid) RESULT(run_on)
-     !! Returns if a process is running on the local machine
-     !! 1 if yes and 0 if not
-     INTEGER, INTENT(IN)       ::   pid
-     INTEGER                   ::   run_on
-     INTEGER                   ::   istat
-
-     INTERFACE
-        FUNCTION kill(pid, sig) BIND(C, name="kill") RESULT(errno)
-           IMPORT
-           INTEGER(KIND=C_INT), VALUE                :: pid, sig
-           INTEGER(KIND=C_INT)                      :: errno
-        END FUNCTION
-     END INTERFACE
-
-     ! If sig is 0, then no signal is sent, but error checking is still
-     ! performed; this can be used to check for the existence of a process
-     ! ID or process group ID.
-
-     istat = kill(pid=pid, sig=0)
-     IF (istat == 0) THEN
-        run_on = 1 ! no error, process exists
-     ELSE
-        run_on = 0 ! error, process probably does not exist
-     END IF
-
-  END FUNCTION m_procrun
-
   SUBROUTINE m_memory(mem)
      !! Returns the total amount of memory [bytes] in use, if known, zero otherwise
 
