Implement start subcommand on Windows. Fix #34
This commit is contained in:
		
							parent
							
								
									fa64125fa0
								
							
						
					
					
						commit
						478d30189f
					
				| 
						 | 
				
			
			@ -29,7 +29,6 @@ lazy_static = "1.4.0"
 | 
			
		|||
[target.'cfg(unix)'.dependencies]
 | 
			
		||||
libc = "0.2.62"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[dev-dependencies]
 | 
			
		||||
tempfile = "3.1.0"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,7 @@
 | 
			
		|||
 | 
			
		||||
#define UNICODE
 | 
			
		||||
 | 
			
		||||
#include <Windows.h>
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#include <strsafe.h>
 | 
			
		||||
#include <shellapi.h>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -530,4 +530,32 @@ int32_t show_context_menu(MenuItem * items, int32_t count) {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int32_t start_daemon_process() {
 | 
			
		||||
    wchar_t cmd[MAX_PATH];
 | 
			
		||||
    swprintf(cmd, MAX_PATH, L"espanso.exe daemon");
 | 
			
		||||
 | 
			
		||||
    STARTUPINFO si = { sizeof(si) };
 | 
			
		||||
    PROCESS_INFORMATION pi;
 | 
			
		||||
 | 
			
		||||
    // Documentation: https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessw
 | 
			
		||||
    BOOL res = CreateProcess(
 | 
			
		||||
            L"./espanso.exe",
 | 
			
		||||
            cmd,
 | 
			
		||||
            NULL,
 | 
			
		||||
            NULL,
 | 
			
		||||
            FALSE,
 | 
			
		||||
            DETACHED_PROCESS,
 | 
			
		||||
            NULL,
 | 
			
		||||
            NULL,
 | 
			
		||||
            &si,
 | 
			
		||||
            &pi
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    if (!res) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -23,6 +23,10 @@
 | 
			
		|||
#include <stdio.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
// SYSTEM
 | 
			
		||||
 | 
			
		||||
extern "C" int32_t start_daemon_process();
 | 
			
		||||
 | 
			
		||||
extern void * manager_instance;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,7 @@ pub struct WindowsMenuItem {
 | 
			
		|||
#[allow(improper_ctypes)]
 | 
			
		||||
#[link(name="winbridge", kind="static")]
 | 
			
		||||
extern {
 | 
			
		||||
    pub fn start_daemon_process() -> i32;
 | 
			
		||||
    pub fn initialize(s: *const c_void, ico_path: *const u16, bmp_path: *const u16) -> i32;
 | 
			
		||||
 | 
			
		||||
    // SYSTEM
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -294,7 +294,12 @@ fn start_main(config_set: ConfigSet) {
 | 
			
		|||
 | 
			
		||||
#[cfg(target_os = "windows")]
 | 
			
		||||
fn detach_daemon() {
 | 
			
		||||
    // TODO
 | 
			
		||||
    unsafe {
 | 
			
		||||
        let res = bridge::windows::start_daemon_process();
 | 
			
		||||
        if res < 0 {
 | 
			
		||||
            println!("Error starting daemon process");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(not(target_os = "windows"))]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user