Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема в коде 
V
    Опции темы
Тутанхамец
Дата 2.10.2006, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Здравствуйте! Есть такой код из файла setup.vbs. Он скидывает в файл серийный номер тома. Папка для файла выбирается юзером. На некоторых машинах работает, а на некоторых нет (пишет неверный номер). Подскажите, пожалуйста, где ошибка?

Код

set sh=CreateObject("Shell.Application")
set fold=sh.browseforfolder (0, "Выберите папку:", 0)
set sh=nothing
if fold is nothing then wscript.quit
set parfold=fold.parentfolder
set fi=parfold.parseName (fold.title)

spath=wscript.scriptfullname
spath=left(spath,len(spath)-len(wscript.scriptname))
if right(spath,1)<>"\" then spath=spath+"\"

set fso=CreateObject("Scripting.FileSystemObject")
set drv=fso.drives(fso.getdrivename(spath))
num=drv.serialnumber
num1=num\2^16
num2=num mod 2^16

num11=num1\2^8
num12=num1 mod 2^8

num21=num2\2^8
num22=num2 mod 2^8

set mf=fso.createtextfile(fi.path+"\sn.dat", true, false)
mf.write (cstr(chr(num22))+cstr(chr(num21))+cstr(chr(num12))+cstr(chr(num11)))
mf.close
set mf=nothing





Это сообщение отредактировал(а) Тутанхамец - 2.10.2006, 10:19
PM MAIL   Вверх
Akina
Дата 2.10.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



В какой строке возникает ошибка? Какой номер ошибки? Или ошибки по исполнению нет, но в файле неверные номера?

А потрассировать?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
cardinal
Дата 2.10.2006, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



А серийный номер тома на разных машинах одинаковый?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Тутанхамец
Дата 3.10.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Цитата

На некоторых машинах работает, а на некоторых нет (пишет неверный номер).

Я имел в виду, что в файле оказывается не то число. Ошибки исполнения нет. 

У меня есть прога на VB, которая тоже записывает в файл номер тома. У нее, и у этого скрипта получаются разные результаты, но только на некоторых машинах. У меня дома прога и скрипт выдают один и тот же файл, а на работе - разные. 

Цитата

А серийный номер тома на разных машинах одинаковый? 


Как уже сказал, дома и на работе - разные. Но на работе проверял только на одной машине.

Добавлено @ 17:08 
Цитата

А потрассировать? 


Выводил msgbox'ом значения переменных после каждого преобразования. На отдельные байты серийник разбивается вроде правильно. 
PM MAIL   Вверх
sergejzr
Дата 3.10.2006, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Модератор: Название темы должно отражать ее суть!Модератор: Название темы должно отражать ее суть!


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
cardinal
Дата 3.10.2006, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Я к тому спросил, что почему они должны быть на работе и дома одинаковые?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Akina
Дата 3.10.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(Тутанхамец @  3.10.2006,  18:01 Найти цитируемый пост)
Выводил msgbox'ом значения переменных после каждого преобразования. На отдельные байты серийник разбивается вроде правильно.  

То есть получается что в файл попадает не содержимое переменных (которое правильное), а черт знает что, так? Или в переменные уже попадает не то что должно попадать? уж озаботься...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Тутанхамец
Дата 4.10.2006, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Цитата

Модератор: Название темы должно отражать ее суть!Модератор: Название темы должно отражать ее суть! 


Да, виноват. Но что-то не соображу, как могло бы выглядеть нормальное название. Если только "Неопределенная проблема в коде скрипта". 

Цитата

Я к тому спросил, что почему они должны быть на работе и дома одинаковые? 


Не должны. Но если програма и этот скрипт скидывают в файл серийник одного и того же тома, то они, имхо, должны быть одинаковыми. А они одинаковы только на моем домашнем. 

Цитата

То есть получается что в файл попадает не содержимое переменных (которое правильное), а черт знает что, так? Или в переменные уже попадает не то что должно попадать? уж озаботься... 


В файле оказывается именно содержимое переменных. На работе серийный номер тома 613888 (msgbox drv.serialnumber). Я проверил, как оно раскладывается на байты. В файле оказывается именно 613888. Но это результат, выдаваемый скриптом. А моя программа, которая тоже записывает серийник в файл, выдает другой результат. Вот код программы:

Код

Public Sub Main()
Dim fso As FileSystemObject
Dim dr As Drive
Dim sn As Long
Dim TargetPath As String
TargetPath = Trim(Command$)
If TargetPath = "" Then TargetPath = App.Path
If Left$(TargetPath, 1) = Chr$(34) Then TargetPath = Mid$(TargetPath, 2)
If Right$(TargetPath, 1) = Chr$(34) Then TargetPath = Left$(TargetPath, Len(TargetPath) - 1)

If Right$(TargetPath, 1) <> "\" Then TargetPath = TargetPath + "\"


Set fso = New FileSystemObject
Set dr = fso.GetDrive(Left$(App.Path, 2))
sn = dr.SerialNumber
Open TargetPath + "sn.dat" For Random As #1
Put #1, 1, sn
Close #1
Set dr = Nothing
Set fso = Nothing

End Sub
 
PM MAIL   Вверх
sergejzr
Дата 4.10.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Цитата(Тутанхамец @  4.10.2006,  15:34 Найти цитируемый пост)
Да, виноват. Но что-то не соображу, как могло бы выглядеть нормальное название. Если только "Неопределенная проблема в коде скрипта". 

Например: "Скрипт не всегда правильно определяет серийный номер тома".


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Тутанхамец
Дата 4.10.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Господа! Спасибо за помощь. Простите за тупость. Нашел бяку. 
Код

set sh=CreateObject("Shell.Application")
set fold=sh.browseforfolder (0, "Выберите папку:", 0)
set sh=nothing
if fold is nothing then wscript.quit
set parfold=fold.parentfolder
set fi=parfold.parseName (fold.title) '!!!!!!!!!!!!!

spath=wscript.scriptfullname  '!!!!!!!!!!!!!!!
spath=left(spath,len(spath)-len(wscript.scriptname))
if right(spath,1)<>"\" then spath=spath+"\"

set fso=CreateObject("Scripting.FileSystemObject")
set drv=fso.drives(fso.getdrivename(spath)) '!!!!!!!!!!!!!!!!!
num=drv.serialnumber


Я получаю серийник не того диска, куда пишу файл, а того, с которого запускается скрипт. Дома я запускал скрипт с винчестера и файл писал на винчестер. Оба серийника совпадали. На работе я запускал скрипт с флэшке, и в файле оказывался серийник флэшки. Вот так надо:
Код

set drv=fso.drives(fso.getdrivename(fi.path))



Это сообщение отредактировал(а) Тутанхамец - 4.10.2006, 18:02
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0837 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.