1

Тема: VBS. Не создается текс.файл при автозагрузке скрипта

Здрасти! Есть скрипт, который при входе определенного пользователя создает текстовый файл, записывает время запуска (если файл не создан), если создан, просто в следующей строчке пишет время. После этого скрипт отправляет смс на телефон. Так вот, простым нажатием два раза  мышкой на нем, все работает. Но когда поставил в автозагрузку, текстовый файл не создается, хотя сообщение отправляется. Думал может из-за того что система не успевает загрузится, написал "Sleep" на 20 сек. Но результат тот же. Кто то знает в чем дело?

2

Re: VBS. Не создается текс.файл при автозагрузке скрипта

Приведите код скрипта. Опишите, каким образом он исполняется «при входе определенного пользователя».

3 (изменено: НеОчень, 2012-07-06 15:29:05)

Re: VBS. Не создается текс.файл при автозагрузке скрипта

'==================================запись в блокнот===============================
WScript.Sleep 50000
Const ForAppending = 8, TristateUseDefault = -2
Dim FSO,F,TextStream,s
' Создаем объект FileSystemObject
Set FSO=WScript.CreateObject("Scripting.FileSystemObject")
' Создаем в текущем каталоге файл test1.txt
If Not FSO.FileExists("test1.txt") Then
FSO.CreateTextFile "test1.txt"
End If
' Создаем объект File для файла test1.txt
set F=FSO.GetFile("test1.txt")
' Создаем объект TextStream (файл открывается для записи)
Set TextStream=F.OpenAsTextStream(ForAppending, TristateUseDefault)
' Записываем в файл строку
TextStream.WriteLine "Был произведен запуск с учетной записи konstantin : " & Now &VbCrLf
' Закрываем файл
TextStream.Close
'==================================Конец============================================ 
Const Login = "ygbonyakevuch@gmail.com"
Const PW = "no"

Set objSMS = New SMSNotification
    If objSMS.SendMessage(Login, PW, "Вход по константином", "Костяк зашел", "на ки") Then
        MsgBox "Сообщение отправлено", vbInformation
    Else
        MsgBox "Не удалось отправить сообщение", vbCritical
    End If
Set objSMS = Nothing
 
Class SMSNotification    
    Public Function SendMessage(sLogin, sPW, sTitle, sContent, sWhere)
        'проверяем службу времени
        If Not W32TimeCheck Then Exit Function
                'синхронизируем время
        If Not TimeSinc Then Exit Function
        Dim XMLHttp 'XMLHttpRequest
        Dim sAuthTokens
        Set XMLHttp = CreateObject("Microsoft.XMLHTTP")
        With XMLHttp            
            'авторизуемся
            .Open "POST", "https://www.google.com/accounts/ClientLogin", False
            .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
            .Send "Email=" & sLogin & "&Passwd=" & sPW & "&service=cl&source=da440dil-GSMS-1.0"
            'получаем строку аутентификации 
            sAuthTokens = Right(.responseText, Len(.responseText)-InStr(.responseText, "Auth=")-4)
            If .Status <> 200 Then Exit Function 'ошибка            
            'работаем с календарем
            .Open "POST", "http://www.google.com/calendar/feeds/default/private/full", False
            .SetRequestHeader "Content-Type", "application/atom+xml"
            .SetRequestHeader "X-If-No-Redirect", "True"
            .SetRequestHeader "Authorization", "GoogleLogin auth=" & sAuthTokens
            .Send "<?xml version='1.0' ?><entry xmlns='http://www.w3.org/2005/Atom' " & _
                    "xmlns:gd='http://schemas.google.com/g/2005'>" & _        
                    "<title type='text'>" & sTitle & "</title>" & _
                    "<content type='text'>" & sContent & "</content>" & _
                    "<gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'>" & _
                    "</gd:eventStatus>" & _
                    "<gd:where valueString='" & sWhere & "'></gd:where>" & _
                    "<gd:when startTime='" & MakeDateTime() & _
                    "' endTime='" & MakeDateTime() & "'>" & _
                    "<gd:reminder minutes='1' method='sms' /></gd:when></entry>"
            If .Status <> 201 Then Exit Function 'ошибка            
        End With
        Set XMLHttp = Nothing
        SendMessage = True
    End Function
 
    'собираем время в необходимом формате
    Private Function MakeDateTime()    
        MakeDateTime = Year(Date()) & "-" & Right(0 & Month(Date()),2) & "-" & _
                Right(0 & Day(Date),2) & "T" & Right(0 & DateAdd("s",60,Time()),8)    
    End Function
 
    'запуск службы времени
    Private Function W32TimeCheck()
        Set objShellApp = CreateObject("Shell.Application")
        With objShellApp
            If Not .IsServiceRunning("W32Time") Then
                If .ServiceStart("W32Time", True) = 0 Then Exit Function
            End If
            'вместо WScript.Sleep, т.к. вероятно Shell.Application выполняет ServiceStart асинхронно
            W32TimeCheck = .IsServiceRunning("W32Time")
        End With
        Set objShellApp = Nothing
    End Function
 
    'синхронизация времени с временем интернета
    Private Function TimeSinc()
        Set wshShell = CreateObject("WScript.Shell")
        With wshShell
            If .Run("w32tm /config /syncfromflags:manual /manualpeerlist:" & Chr(34) & _
                    "time.windows.com time.nist.gov, time-nw.nist.gov, time-a.nist.gov, time-a.nist.gov" & Chr(34) _
                    ,0,True) <> 0 Then Exit Function
            If .Run("w32tm /config /update",0,True) <> 0 Then Exit Function
 
            If .Run("w32Tm /resync /rediscover",0,True) <> 0 Then Exit Function
        End With
        Set wshShell = Nothing
        TimeSinc = True    
    End Function
 
End Class

В реестре в HKCU->Softaware->Microsoft->Windows->CurrentVersion->Run прописал. То есть пользователь входит в систему и запускается скрипт. И он запускается, вот только первая его часть (где создание документа) не работает, а вторая (отправка смс) работает. Повторюсь, при обычном запуске все работает.
Скрипт запускается с рабочего стола, там же создается файл (может это имеет какое то значение )

4 (изменено: smaharbA, 2012-07-06 17:41:47)

Re: VBS. Не создается текс.файл при автозагрузке скрипта

путь к файлу задайте

и выкиньте проверку на существование и так напишите

= fso.OpenTextFile(file,ForAppending, True, TristateUseDefault)

Я конечно далек от мысли... (с)