Search in sources :

Example 1 with ShellLink

use of mslinks.ShellLink in project TeachingInSimulation by ScOrPiOzzy.

the class LnkParser2 method parser.

private File parser(File file) {
    if (isLnkFile(file)) {
        try {
            ShellLink link = new ShellLink(file.getAbsolutePath());
            String ext = FileUtil.getFileExt(link.getLinkInfo().getLocalBasePath());
            String realPath = link.getWorkingDir() + File.separator + file.getName().replaceAll("lnk", ext);
            return new File(realPath);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ShellLinkException e) {
            e.printStackTrace();
        }
        System.err.println(String.format("未找到快捷方式:%s的真实路径", file.getAbsolutePath()));
        return null;
    } else {
        return file;
    }
}
Also used : ShellLink(mslinks.ShellLink) IOException(java.io.IOException) File(java.io.File) ShellLinkException(mslinks.ShellLinkException)

Example 2 with ShellLink

use of mslinks.ShellLink in project osumer by mob41.

the class Installer method install.

public void install() throws DebuggableException {
    if (!Osumer.isWindows()) {
        throw new DebuggableException(null, "Validate OS is Windows", "Throw debuggable exception", "Validate is osumer elevated", "Installer does not support non-Windows environment", false);
    }
    if (!Osumer.isWindowsElevated()) {
        throw new DebuggableException(null, "Validate OS is Windows", "Validate is osumer elevated", "Create File instance of \"osumer.exe\"", "osumer is not elevated. Restart osumer with administrative privileges.", false);
    }
    String runningFilePath = null;
    try {
        runningFilePath = URLDecoder.decode(Installer.class.getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8");
    } catch (UnsupportedEncodingException e1) {
        e1.printStackTrace();
        throw new DebuggableException(null, "Validate is osumer elevated", "Get current running file path", "Validate is running file name is ending with .exe", "Unsupported encoding UTF-8", false, e1);
    }
    if (!runningFilePath.endsWith(".exe")) {
        throw new DebuggableException(runningFilePath, "Get current running file path", "Validate is running file name is ending with .exe", "Create File instance of \"osumer.exe\"", "A Windows executable (.exe) version of osumer is required for installation. It can be downloaded from the releases. If you have it, rename it to \"osumer.exe\" to continue.", false);
    }
    File file = new File(runningFilePath);
    if (!file.exists()) {
        throw new DebuggableException(runningFilePath, "Validate is running file name is ending with .exe", "Create File instance of \"osumer.exe\"", "Create File instance of constant field winPath", "Unexpected? The running file-name does not exist!", false);
    }
    File destFolder = new File(winPath);
    if (!destFolder.exists()) {
        destFolder.mkdirs();
    }
    File verInfo = new File(winPath + "\\" + verInfoFile);
    try {
        if (verInfo.exists()) {
            verInfo.delete();
        }
        JSONObject verInfoJson = new JSONObject();
        verInfoJson.put("version", Osumer.OSUMER_VERSION);
        verInfoJson.put("branch", Osumer.OSUMER_BRANCH);
        verInfoJson.put("build", Osumer.OSUMER_BUILD_NUM);
        verInfo.createNewFile();
        FileOutputStream out = new FileOutputStream(verInfo);
        out.write(Base64.encodeBase64(verInfoJson.toString().getBytes(StandardCharsets.UTF_8)));
        out.flush();
        out.close();
    } catch (IOException e) {
        throw new DebuggableException(null, "Create new File instance with \"" + winPath + "\\" + verInfoFile + "\"", "Create application version info", "Create new File instance with \"" + winPath + "\\" + winFile + "\"", "Error creating version info", false, e);
    }
    File dest = new File(winPath + "\\" + winFile);
    try {
        if (dest.exists()) {
            dest.delete();
        }
        dest.createNewFile();
        FileOutputStream out = new FileOutputStream(dest);
        Files.copy(file.toPath(), out);
        out.flush();
        out.close();
    } catch (IOException e) {
        throw new DebuggableException(null, "Create new File instance with \"" + winPath + "\\" + winFile + "\"", "(Try scope) Copying file", "Creating Main osumer link in Start Menu", "Error copying file", false, e);
    }
    File startPathFolder = new File(START_MENU_PATH);
    if (!startPathFolder.exists() || !startPathFolder.isDirectory()) {
        startPathFolder.mkdir();
    }
    ShellLink slMain = ShellLink.createLink(Installer.winPath + "\\" + Installer.winFile);
    slMain.setWorkingDir(Installer.winPath);
    slMain.setIconLocation(Installer.winPath + "\\" + Installer.winFile);
    slMain.getHeader().setIconIndex(0);
    try {
        slMain.saveTo(START_MENU_PATH + "\\osumer.lnk");
    } catch (IOException e1) {
        throw new DebuggableException(null, "(Try scope) Copying file", "Creating Main osumer link in Start Menu", "Creating Daemon osumer link in Start Menu", "Error copying file", false, e1);
    }
    ShellLink slDaemon = ShellLink.createLink(Installer.winPath + "\\" + Installer.winFile);
    slDaemon.setWorkingDir(Installer.winPath);
    slDaemon.setCMDArgs("-daemon");
    slDaemon.setIconLocation(Installer.winPath + "\\" + Installer.winFile);
    slDaemon.getHeader().setIconIndex(0);
    try {
        slDaemon.saveTo(START_MENU_PATH + "\\osumer (Start as Daemon).lnk");
    } catch (IOException e1) {
        throw new DebuggableException(null, "Creating Main osumer link in Start Menu", "Creating Daemon osumer link in Start Menu", "(Next Try scope) Writing to registry", "Error copying file", false, e1);
    }
    try {
        // Create root key
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress
        boolean success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_CLIENTS_PATH, WIN_REG_INTERNET_CLIENT_KEY);
        final String clientRegPath = WIN_REG_CLIENTS_PATH + "\\" + WIN_REG_INTERNET_CLIENT_KEY;
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/@
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, "", WIN_REG_INTERNET_CLIENT_DEFAULT_VALUE);
        // Capabilities
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities
        success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, WIN_REG_CAP_KEY);
        final String capRegPath = clientRegPath + "\\" + WIN_REG_CAP_KEY;
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities/@ApplicationName,@ApplicationDescription,@ApplicationIcon
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_APPNAME_PARA, WIN_REG_CAP_APPNAME_VALUE);
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_APPDESC_PARA, WIN_REG_CAP_APPDESC_VALUE);
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_APPICON_PARA, WIN_REG_CAP_APPICON_VALUE);
        // Capabilities: Startmenu
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities/Startmenu
        success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_STARTMENU_KEY);
        // Legacy use
        final String capStartMenuRegPath = capRegPath + "\\" + WIN_REG_CAP_STARTMENU_KEY;
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities/Startmenu/@StartMenuInternet
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, capStartMenuRegPath, WIN_REG_CAP_STARTMENU_STARTMENUINTERNET_PARA, WIN_REG_CAP_STARTMENU_STARTMENUINTERNET_VALUE);
        // Capabilities: File associations
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities/FileAssociations
        success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_FILEASSOC_KEY);
        // No file associations currently
        // Capabilities: URL Associations
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities/URLAssociations
        success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, capRegPath, WIN_REG_CAP_URLASSOC_KEY);
        final String urlAssocRegPath = capRegPath + "\\" + WIN_REG_CAP_URLASSOC_KEY;
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/Capabilities/URLAssociations/@http,@https
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, urlAssocRegPath, WIN_REG_CAP_URLASSOC_HTTP_PARA, WIN_REG_CAP_URLASSOC_HTTP_VALUE);
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, urlAssocRegPath, WIN_REG_CAP_URLASSOC_HTTPS_PARA, WIN_REG_CAP_URLASSOC_HTTPS_VALUE);
        // Default icon
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/DefaultIcon
        success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, WIN_REG_DEFAULTICON_KEY);
        final String defaultIconRegPath = clientRegPath + "\\" + WIN_REG_DEFAULTICON_KEY;
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/DefaultIcon/@
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, defaultIconRegPath, "", WIN_REG_DEFAULTICON_DEFAULT_VALUE);
        // Install info
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/InstallInfo
        success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, WIN_REG_INSTALLINFO_KEY);
        final String installInfoRegPath = clientRegPath + "\\" + WIN_REG_INSTALLINFO_KEY;
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/InstallInfo/@HideIconsCommand
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, installInfoRegPath, WIN_REG_INSTALLINFO_HIDEICON_PARA, WIN_REG_INSTALLINFO_HIDEICON_VALUE);
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/InstallInfo/@ShowIconsCommand
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, installInfoRegPath, WIN_REG_INSTALLINFO_SHOWICON_PARA, WIN_REG_INSTALLINFO_SHOWICON_VALUE);
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/InstallInfo/@ReinstallCommand
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, installInfoRegPath, WIN_REG_INSTALLINFO_REINSTALL_PARA, WIN_REG_INSTALLINFO_REINSTALL_VALUE);
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/InstallInfo/@IconsVisible
        Advapi32Util.registrySetIntValue(WinReg.HKEY_LOCAL_MACHINE, installInfoRegPath, WIN_REG_INSTALLINFO_ICONSVISIBLE_PARA, WIN_REG_INSTALLINFO_ICONSVISIBLE_VALUE);
        // Shell: Open: Command
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/shell
        success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, clientRegPath, WIN_REG_SHELL_KEY);
        final String shellRegPath = clientRegPath + "\\" + WIN_REG_SHELL_KEY;
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/shell/open
        success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, shellRegPath, WIN_REG_SHELL_OPEN_KEY);
        final String shellOpenRegPath = shellRegPath + "\\" + WIN_REG_SHELL_OPEN_KEY;
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/shell/open/command
        success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, shellOpenRegPath, WIN_REG_SHELL_OPEN_COMMAND_KEY);
        final String shellOpenCmdRegPath = shellOpenRegPath + "\\" + WIN_REG_SHELL_OPEN_COMMAND_KEY;
        // HKLM/SOFTWARE/Clients/StartMenuInternet/osumerExpress/shell/open/command/@
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, shellOpenCmdRegPath, "", WIN_REG_SHELL_OPEN_COMMAND_DEFAULT_VALUE);
        // Registered Applications
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_REGISTEREDAPPS_PATH, WIN_REG_REGISTEREDAPPS_OSUMEREXPRESS_PARA, WIN_REG_REGISTEREDAPPS_OSUMEREXPRESS_VALUE);
        // Classes
        // HKLM/SOFTWARE/Classes/osumer
        success = Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_CLASSES_PATH, WIN_REG_CLASSES_OSUMER_KEY);
        final String osumerClassRegPath = WIN_REG_CLASSES_PATH + "\\" + WIN_REG_CLASSES_OSUMER_KEY;
        // HKLM/SOFTWARE/Classes/osumer/@
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, osumerClassRegPath, "", WIN_REG_CLASSES_OSUMER_DEFAULT_VALUE);
        // HKLM/SOFTWARE/Classes/osumer/@FriendlyTypeName
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, osumerClassRegPath, WIN_REG_CLASSES_OSUMER_FRIENDLYTYPENAME_PARA, WIN_REG_CLASSES_OSUMER_FRIENDLYTYPENAME_VALUE);
        Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, osumerClassRegPath, "shell");
        Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, osumerClassRegPath + "\\shell", "open");
        Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, osumerClassRegPath + "\\shell\\open", "command");
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, osumerClassRegPath + "\\shell\\open\\command", "", WIN_REG_SHELL_OPEN_COMMAND_DEFAULT_VALUE + " \"%1\"");
        // Run
        // HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Run/@osumerDaemon
        Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, WIN_REG_RUN_PATH, WIN_REG_RUN_OSUMERDAEMON_PARA, WIN_REG_RUN_OSUMERDAEMON_VALUE);
    } catch (Win32Exception e) {
        throw new DebuggableException(null, "(Try&catch try) Writing to registry", "Throw debuggable exception", "(End of function)", "Error writing registry", false, e);
    }
}
Also used : DebuggableException(com.github.mob41.organdebug.exceptions.DebuggableException) JSONObject(org.json.JSONObject) FileOutputStream(java.io.FileOutputStream) UnsupportedEncodingException(java.io.UnsupportedEncodingException) IOException(java.io.IOException) ShellLink(mslinks.ShellLink) File(java.io.File) Win32Exception(com.sun.jna.platform.win32.Win32Exception)

Example 3 with ShellLink

use of mslinks.ShellLink in project OvoKore by OvoKore.

the class CriaKore method Iniciar.

public void Iniciar() {
    if (Pattern.compile("^[A-Za-z0-9]+$").matcher(txf.getText()).matches() == false) {
        JOptionPane.showMessageDialog(null, "V�lido somente letras mai�sculas e min�sculas de \"A\" at� \"Z\", e n�meros");
        return;
    }
    if (new File("ordemkore").exists()) {
        File[] files = new File("ordemkore").listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                if (file.getName().equals(txf.getText())) {
                    JOptionPane.showMessageDialog(null, "A pasta \"" + txf.getText() + "\" j� existe dentro da pasta \"ordemkore\"");
                    return;
                }
            }
        }
    }
    try {
        FileUtils.copyDirectory(new File("control"), new File("ordemkore\\" + txf.getText()));
    } catch (IOException e) {
        JOptionPane.showMessageDialog(null, "Erro ao criar nova pasta \"control\" dentro da pasta \"ordemkore\"");
        return;
    }
    try {
        String caminho = CriaKore.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
        caminho = caminho.substring(1, caminho.lastIndexOf('/') + 1);
        ShellLink sl = ShellLink.createLink(caminho + "openkore.pl");
        sl.setCMDArgs("--config=\"" + caminho + "ordemkore/" + txf.getText() + "//config.txt");
        sl.saveTo(caminho + "ordemkore//" + txf.getText() + "//" + txf.getText() + ".lnk");
    } catch (URISyntaxException e) {
        JOptionPane.showMessageDialog(null, "Erro ao gerar o arquivo \"CriaKore " + txf.getText() + "\"");
    } catch (IOException e) {
        JOptionPane.showMessageDialog(null, "Erro ao gerar o arquivo \"CriaKore " + txf.getText() + "\"");
    }
    JOptionPane.showMessageDialog(null, "Pasta criada com sucesso");
}
Also used : IOException(java.io.IOException) ShellLink(mslinks.ShellLink) URISyntaxException(java.net.URISyntaxException) File(java.io.File)

Example 4 with ShellLink

use of mslinks.ShellLink in project tray by qzind.

the class WindowsInstaller method addStartupEntry.

public Installer addStartupEntry() {
    try {
        String lnk = WindowsSpecialFolders.COMMON_STARTUP + File.separator + ABOUT_TITLE + ".lnk";
        String exe = destination + File.separator + PROPS_FILE + ".exe";
        log.info("Creating startup entry \"{}\" -> \"{}\"", lnk, exe);
        ShellLink link = ShellLink.createLink(exe, lnk);
        // honors auto-start preferences
        link.setCMDArgs("--honorautostart");
    } catch (IOException | Win32Exception e) {
        log.warn("Could not create startup launcher", e);
    }
    return this;
}
Also used : ShellLink(mslinks.ShellLink) IOException(java.io.IOException)

Aggregations

IOException (java.io.IOException)4 ShellLink (mslinks.ShellLink)4 File (java.io.File)3 DebuggableException (com.github.mob41.organdebug.exceptions.DebuggableException)1 Win32Exception (com.sun.jna.platform.win32.Win32Exception)1 FileOutputStream (java.io.FileOutputStream)1 UnsupportedEncodingException (java.io.UnsupportedEncodingException)1 URISyntaxException (java.net.URISyntaxException)1 ShellLinkException (mslinks.ShellLinkException)1 JSONObject (org.json.JSONObject)1