Different Behavior Between Interactive Logon and Batch Job/Service Account for COM Object Interaction

אנונימי
2024-08-29T11:25:57+00:00

I'm encountering an issue with a legacy COM object that was developed for local use within my company (I don't have the source code). I have a Java program that interacts with this COM object, specifically calling a method that involves another language.

I created a batch file to run this Java program via a scheduled task. Here's the problem:

  • When the task is set to "Run only when user is logged on" (interactive logon), the program produces the expected result.
  • When the task is set to "Run whether user is logged on or not" (as a batch job), the program returns null.

The Java environment I'm using is JRockit v1.6 x86, and I interact with the COM object using JACOB Dispatch, sending an ActiveXComponent of the COM object.

Things I've Tried:

  1. Simplified the code to only interact with the COM object—no change in behavior.
  2. Printed all accessible properties from the COM object—properties are identical in both methods.
  3. Tried logging in as different users—same result.
  4. Used PowerShell to interact with the COM object—works as expected in ISE, but returns null in the PowerShell console.
  5. Attempted to run the Java program as a service account—again, null is returned.
  6. Printed from within the language method—this prints successfully.

Any insights or suggestions on why this discrepancy occurs and how to resolve it?

חלונות לעסקים | Windows Server | שירותי ספריות | כניסה ופרופילים של משתמשים

שאלה נעולה. השאלה הזו הועברה מקהילת התמיכה של Microsoft. באפשרותך להצביע אם היא שימושית, אך לא ניתן להוסיף הערות או תשובות או לעקוב אחר השאלה.

0 הערות אין הערות

4 תשובות

מיין לפי: המועיל ביותר
  1. אנונימי
    2024-08-30T08:58:15+00:00

    In the 2008r2 server it runs when the user logon as a service.

    In the new 2019 server I tried in both logon as a service and logon as a batch job, and it didnt work at nigher of them.

    I tried to ask some java experts, but they didnt find anything to help.

    I dont really thing that the java behaveI differently, I tried to debug it using PowerShell, but as I wrote, it didnt give me any response on powershell consolehost, even that it gave me a great answer when I tried it on powershell ise.

    האם התשובה הזו הייתה מועילה?

    0 הערות אין הערות
  2. אנונימי
    2024-08-30T08:33:07+00:00

    הערה זו תורגמה באופן אוטומטי. כתוצאה מכך, ייתכנו שגיאות דקדוק או מילים מוזרות.

    שלום

    יום טוב!

    אני מצטער שאני לא מכיר את Java, ניסית להתייעץ עם מהנדס Java? האם הם
    יש לך תובנה בנושא?

    האם אתה מתכוון "כאשר המשימה מוגדרת "הפעל רק כאשר המשתמש מחובר" (כניסה אינטראקטיבית) וכאשר המשימה מוגדרת "הפעל אם המשתמש מחובר או לא" (כמשימת אצווה) בשנת 2008 R2", התוכנית מפיקה את התוצאה הצפויה?

    ברכה
    דייזי ג'ואו

    האם התשובה הזו הייתה מועילה?

    0 הערות אין הערות
  3. אנונימי
    2024-08-29T14:22:22+00:00

    thank you foryor answer!

    1. I am using the same user for both login, the only difference is the logon type
    2. my com object does not related to the desktop, and I know that it worked well somehow on windows server 2008R2 when logon as a service
    3. I tried to idenify any difference between the environment variable using "sev" cmd command, and didnt found a critical difference in the result.
    4. my java access successfully to the COM object, and I printed my ActiveXComponent properties and watch them as they modified
    5. all I need from the COM object is to get a string answer, but I get null as an answer. I tried to print the properties, but I cant think about anithing else that I can print that would help.
    6. this java does not depent on anything other then the com object. I get rid of anything else in my java.

    my java contains:

    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.Dispatch;
    import com.jacob.com.Variant;
    
    public class ActiveXTest {
        public static void main(String[] args) {
    ActiveXComponent ax = new ActiveXComponent("Some.ComObject");
    Dispatch.call(ax, "init","PATH_TO_SOME_FILES_ON_C:");
    
     Variant result = Dispatch.call(ax, "getAllSomething","SomeThing_on_another_language","");
    

    System.out.println("result: "+result.toString());

    }

    }
    this is my basic java, run using the bat file:
    cd class_FOLDER_PATH
    c:

    PATH_TH_JROCKIT_1.6_x86__java.exe -cp _PATH)_TO_JACOB_1.7.jar JAVA_CLASS

    I didnt use any environment variable during my code.

    thank you

    האם התשובה הזו הייתה מועילה?

    0 הערות אין הערות
  4. אנונימי
    2024-08-29T13:27:26+00:00

    תגובה זו תורגמה באופן אוטומטי. כתוצאה מכך, ייתכן שיש שגיאות דקדוק או מילים מוזרות.

    שלום

    תודה שפרסמת בפורום Microsoft Community.

    נשמע שיש הבדלים בסביבה כאשר המשימה מופעלת באופן אינטראקטיבי לעומת כמשימת אצווה. הנה כמה תחומים פוטנציאליים לחקור: 1. הקשר משתמש: כאשר משימה מופעלת עם "הפעל אם המשתמש מחובר או לא", ייתכן שהיא פועלת בהקשר משתמש אחר. ודא שלחשבון המשתמש שתחתיו מופעלת המשימה יש את ההרשאות הדרושות לאינטראקציה עם אובייקט COM ושיש לו את אותם משתני סביבה וגישה כמו כאשר אתה מחובר באופן אינטראקטיבי. 2. אינטראקציה עם שולחן העבודה: אובייקטי COM מסוימים כוללים רכיבים גרפיים או דורשים גישה לשולחן העבודה של המשתמש. מאחר שלמתזמן המשימות יש גישה מוגבלת לשולחן העבודה בהפעלות שאינן אינטראקטיביות, ייתכן שאובייקט COM לא יפעל כצפוי. למרבה הצער, אין דרך פשוטה לקיים אינטראקציה עם שולחן העבודה במצב זה. 3. משתני סביבה ו- PATH: הסביבה שבה פועלת משימה מתוזמנת יכולה להיות שונה מהפעלה אינטראקטיבית. ודא שכל משתני הסביבה הדרושים (כגון PATH, JAVA_HOME וכו') מוגדרים כראוי עבור הפעילות המתוזמנת. 4. COM הרשאות ותצורת DCOM: פתח את 'dcomcnfg' ובדוק את המאפיינים עבור אובייקט COM שלך תחת 'שירותי רכיבים' > 'מחשבים' >'המחשב שלי' > 'תצורת DCOM'. אמת את הגדרות הזהות והאבטחה. ייתכן שיהיה עליך להתאים את ההרשאות כדי לאפשר למשימה לגשת לאובייקט COM. 5. רישום וניפוי באגים: שפר את תוכנית Java שלך עם רישום נוסף כדי ללכוד מידע מפורט יותר על מדוע היא נכשלת כאשר היא מופעלת כמשימת אצווה. זה עשוי לספק רמזים לגבי מה שונה בשתי הסביבות. 6. תלות בשירות: לפעמים, משימות מתוזמנות עשויות להתחיל לפני שכל השירותים הדרושים פועלים במלואם, במיוחד בסביבה שבה המערכת רק מופעלת. ודא שכל השירותים הדרושים זמינים ושהחלו לפעול במלואם לפני הפעלת המשימה. באפשרותך לנסות את השלבים הבאים כדי לאתר באגים ולפתור את הבעיה: בדוק את הקשר המשתמש: ודא שלחשבון המשתמש יש את כל ההרשאות הדרושות. הגדרת סביבה: השתמשו בפקודה 'הגדר' בקובץ האצווה כדי לפרט משתני סביבה ולהשוות אותם בין הפעלות אינטראקטיביות לריצות אצווה. התאימו לפי הצורך. **הפעל כמשתמש אינטראקטיבי**: במידת האפשר, שנה את ההגדרה כדי להפעיל את המשימה באופן אינטראקטיבי כדרך לעקיפת הבעיה. **תצורת DCOM**: התאם את הגדרות DCOM במידת הצורך כדי לאפשר גישה לא אינטראקטיבית. אם אף אחד מהפתרונות לעיל אינו פועל, תוכל לשקול להתייעץ עם המפתח או הספק של אובייקט COM לקבלת תמיכה נוספת או

    כדי להשיג את קוד המקור.

    אני מקווה שהמידע לעיל מועיל.

    אם יש לך שאלה או חשש, אל תהסס להודיע לנו.

    שא ברכה

    דייזי ג'ואו

    האם התשובה הזו הייתה מועילה?

    0 הערות אין הערות