java - تشغيل ملف جافا كمسؤول مع امتيازات كاملة




windows batch-file (3)

لقد قمت بعمل تطبيق Java وقمت باختباره في جهاز الكمبيوتر الخاص بي وجهاز الكمبيوتر الخاص بي ، حتى الآن جيد جدا ... ولكن هذا التطبيق لصديق آخر من الألغام التي لديها ديسكو ، عندما "تثبيت" طلبي على جهاز الكمبيوتر الخاص به ( ويندوز فيستا 32 بت) لم ينجح ، ثم أذهب للبحث والبحث واكتشفت أن المشكلة مثل الامتيازات ... لقد قمت بتثبيت جهاز افتراضي من 32 بت و 32 بت xp للقيام ببعض الاختبارات و " م غير قادر على تشغيل التطبيق الخاص بي مع امتيازات المسؤول الكامل.

هل هناك أي طريقة لإنشاء ملف دفعي أو شيء من شأنه أن يسمح لي بتشغيل التطبيق الخاص بي مع جميع الامتيازات؟ أعني جميعًا لأنني بحاجة إلى الاتصال بمنفذ COM للكمبيوتر للحصول على بعض البيانات من جهاز وأحتاج إلى تخزين بعض الملفات ، وبما أنني أستخدم مكتبة خارجية ، فقد أحتاج إلى بعض الامتيازات التي لا أعرفها ... لقد حاولت هذا ولا يعمل شيء:

elevate "c:\Program Files\Java\jre\bin\java.exe" -jar "%CD%\installer.jar"

باستخدام البرامج النصية مرتفعة من مايكروسوفت ، أنا أيضا إنشاء ملف دفعي مع

runas /user:Administrator myjar.jar

لكن لا شيء يعمل: \ أي أفكار؟ شكرا لكم مقدما


قم بتشغيل موجه الأوامر في وضع المسؤول. لمزيد من المحدد: 1. حدد موقع ملف٪ windir٪ \ system32 \ cmd.exe. 2. انقر بزر الماوس الأيمن وتشغيلها كامتياز المسؤول.


لقد أنشأت حلاً جافا عامًا لهذه المشكلة على جيثب على https://github.com/rritoch/super-user-application . يستخدم النظام JNA أو Sudo لتوفير تطبيق java عبر النظام الأساسي (jar) الذي ينفذ مع حقوق المسؤول. أسهل طريقة لاستخدامها هي أن تقوم بتمكين الصف الرئيسي الخاص بك لتوسيع الفئة التجريبية SuperUserApplication والاتصال بـ SU.run (new MyMain ()، args) من وظيفتك الرئيسية على النحو التالي.

package com.vnetpublishing.java;

import com.vnetpublishing.java.suapp.SU;
import com.vnetpublishing.java.suapp.SuperUserApplication;

public class TestAdmin extends SuperUserApplication {

    public static void main(String[] args) {
        SU.run(new TestAdmin(), args);
    }

    public int run(String[] args) {
        System.out.println("RUN AS ADMIN! YAY!");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return 0;
    }
}

تم اختبار هذه المكتبة على نظامي التشغيل Linux و Windows ، ولكن يجب أن تعمل أيضًا مع نظام التشغيل Mac / OSX. العيب الرئيسي مع هذا الحل هو أنه يعمل فقط عندما يتم تنفيذ التطبيق كزجاجة. عندما لا تحتوي الجرة المُنَفَّذة على حقوق المسؤول ، تحتاج إلى إعادة تنفيذ الجرة بامتيازات المسؤول. إذا لم يتم تشغيل التطبيق من جرة فإنه يطرح InvalidStateException.

لا تتردد في المساهمة في هذا المشروع.


باستخدام Gradle

يمكنك أيضًا استخدام Gradle والمكون الإضافي launch4j . تبدأ في الخطوة 3 من إجابة آشيوم ، أي إنشاء ملف myapp.manifest مع

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="highestAvailable"   uiAccess="False" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>  

ثم أضف إلى build.gradle الخاص بك

plugins {
  id 'java'
  id 'edu.sc.seis.launch4j' version '2.4.3'
}

launch4j {
    mainClassName = 'com.mypackage.MainClass'
    icon = "$projectDir/icons/icon.ico"
    manifest = "$projectDir/myapp.manifest"
}




runas