Как Использовать Две Разные Версии Файлов Googleplayservices В Двух Разных Продуктах?
По причинам, особенно для моего приложения, я хотел бы использовать две разные версии библиотеки Google Play Services в двух разных продуктах. Но gradle дает мне знакомое сообщение об ошибке:
Исправьте конфликт версии либо путем обновления версии плагина google-services (информация о последней версии доступна на странице https://bintray.com/android/android-tools/com.google.gms.google-services/) или обновить версию com.google.android.gms до 10.2.4.
Обычно я исправляю это, используя согласованные версии библиотек GPS. Но в этом случае я думал, что несогласованность будет в порядке, потому что я собираю приложение в два отдельных вкуса. Это не совсем работает:
app build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion '25.0.2'
defaultConfig {
applicationId "com.albertcbraun.googleplayservicesversionconflicttestcase"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
flavor1 {
applicationId 'com.albertcbraun.flavor1'
}
flavor2 {
applicationId 'com.albertcbraun.flavor2'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
// these are the problematic lines. GPS versions differ:
flavor1Compile 'com.google.android.gms:play-services-identity:10.2.4'
flavor2Compile 'com.google.android.gms:play-services-identity:9.6.1'
}
apply plugin: 'com.google.gms.google-services'
проект build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
classpath 'com.google.gms:google-services:3.0.0'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Gradle Версия: 3.3
Версия Android: 2.3.1
android android-studio android-gradle google-play-services
Удаление Объекта В Пакете Boost В С++
У меня есть класс, который имеет элемент std::list<boost::reference_wrapper<polygonType> > m_children;
Когда объект создается из этого класса, я сохраняю все дочерние элементы этого объекта в качестве ссылки в этой переменной. То, что я хотел сделать, - это когда деструктор объекта вызывается, я хотел, чтобы деструктор детей вызывался.
- Это автоматическое поведение в этом случае? или мне нужно что-то написать для этого, дайте этому списку ссылки?
- Если я хочу, чтобы они не удалялись, что мне нужно делать? Если я хочу, чтобы они удалили, что мне нужно сделать?
Это в основном сводится к некоторым дизайнерским решениям, которые я принял, и как я их исправляю.
c++ virtual-destructor boost-ref
Добавить Qgraphicsview В Форме Из Другого Класса
У меня есть класс MainWindow и другой класс. У другого класса есть метод createView, который создает новый QGraphicsView. Этот метод, который я вызываю из MainWindow, и также хочу, чтобы это представление отображалось в моей форме. Это выглядит как:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)) {
...
AnotherClass object(this);
object.createView();
...
}
...
void AnotherClass::createView() {
QGraphicsView *gv= new QGraphicsView(mainWindow); // mainWindow - pointer to MainWindow object
gv->show();
}
Но это не работает так хорошо... на самом деле это вообще не работает. И да, я сохраняю указатель на объекте MainWindow в моем другом классе как mainWindow, который я беру из другого конструктора класса. Если использование
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)) {
...
QGraphicsView *gv= new QGraphicsView(this);
gv->show();
...
}
Это будет хорошо работать, но это решение меня не удовлетворяет.
c++ qt qmainwindow qgraphicsview
Лучший Способ Обработки Сообщений Sqs
У меня есть клиент, который постоянно заливает данные в режиме реального времени в очередь sqs и хочет обрабатывать и хранить сообщения. Моя первая мысль заключалась в том, чтобы использовать планировщик CloudWatch, который запрашивает Лямбду с приблизительным количеством сообщений, которые затем лямбда заставляют рабочих лямбда обрабатывать и выталкивать данные в Firehose. Проблема заключается в том, что в очередь будут помещаться сотни тысяч сообщений каждый день. Я мог бы также использовать EC2 для этого, но есть ли другой эффективный с точки зрения затрат способ обработки очереди в режиме реального времени.
amazon-web-services amazon-ec2 amazon-sqs aws-lambda
Как Разместить Встроенное Видео С Youtube В Верхней Части Изображения (В Виде Рамки Вокруг Видео)
Я хочу поместить встроенное видео с YouTube в верхнюю часть изображения, чтобы он выглядел как кадр вокруг видео Youtube. Они идеально выровнены по горизонтали, но я не могу выровнять видео и изображение по вертикали. Как-то мне нужно добавить отступы к вершине видео Youtube, чтобы оно опустилось в рамку.
Я использую Wordpress, и измерения для рамки идеально подходят для видео. Мне просто нужно опустить видео в рамку.
Любые идеи о том, как снизить видео Youtube, чтобы он правильно выравнивался внутри рамки?
Спасибо!
html youtube video wordpress
Производительность С++: Std :: Array Vs Std :: Vector
Добрый вечер.
Я знаю, что массивы в стиле C или std :: array не быстрее векторов. Я все время использую векторы (и использую их хорошо). Тем не менее, у меня есть ситуация, в которой использование std :: array работает лучше, чем с std :: vector, и я понятия не имею, почему (протестировано с clang 7.0 и gcc 8.2).
Позвольте мне поделиться простым кодом:
#include <vector>
#include <array>
// some size constant
const size_t N = 100;
// some vectors and arrays
using vec = std::vector<double>;
using arr = std::array<double,3>;
// arrays are constructed faster here due to known size, but it is irrelevant
const vec v1 {1.0,-1.0,1.0};
const vec v2 {1.0,2.0,1.0};
const arr a1 {1.0,-1.0,1.0};
const arr a2 {1.0,2.0,1.0};
// vector to store combinations of vectors or arrays
std::vector<double> glob(N,0.0);
Все идет нормально. Приведенный выше код, который инициализирует переменные, не включен в тест. Теперь давайте напишем функцию для объединения элементов (double
) из v1
и v2
или из a1
и a2
:
// some combination
auto comb(const double m, const double f)
{
return m + f;
}
И эталонные функции:
void assemble_vec()
{
for (size_t i=0; i<N-2; ++i)
{
glob[i] += comb(v1[0],v2[0]);
glob[i+1] += comb(v1[1],v2[1]);
glob[i+2] += comb(v1[2],v2[2]);
}
}
void assemble_arr()
{
for (size_t i=0; i<N-2; ++i)
{
glob[i] += comb(a1[0],a2[0]);
glob[i+1] += comb(a1[1],a2[1]);
glob[i+2] += comb(a1[2],a2[2]);
}
}
Я пробовал это с Clang 7.0 и GCC 8.2. В обоих случаях версия массива работает почти вдвое быстрее, чем векторная версия.
Кто-нибудь знает почему? Спасибо!
c++ performance benchmarking stdvector stdarray
Редактирование Файла Без Изменения Форматирования
У меня есть текстовый файл, содержащий строки и числа. Я хотел бы создать короткий скрипт, который ищет определенную строку, и если строка найдена, она умножает n-й разделитель, разделенный пробелом этой строки, на коэффициент масштабирования и сохраняет все в новый файл.
Мы можем предположить, что в файле будет только одна такая строка, а также что n-й аргумент в этой строке будет числом с плавающей запятой. В идеале программа также сохранит форматирование исходного файла.
Например, для поиска строки "ab ce" и умножения четвертого аргумента этой строки на 2.0:
./prog "ab ce" 4 2.0 inputfile.txt output.txt
inputfile.txt:
ab cd 1.0 2.0 3.0
ab ce 1.0 2.0 3.0
ac ce 1.0 2.0 3.0
ac ce de ef 1.0 2.0 3.0
output.txt
ab cd 1.0 2.0 3.0
ab ce 1.0 4.0 3.0
ac ce 1.0 2.0 3.0
ac ce de ef 1.0 2.0 3.0
Я попытался сделать это с помощью awk (ниже), однако это не сохраняет форматирование, и я подозреваю, что есть более элегантное решение. Может ли кто-то предложить другой подход?
#!/bin/sh
search_string=$1
n=$2
scaling=$3
inputfilename=$4
outputname=$5
awk -vORS= -v scal="$scaling" -v ch="$n" -v inp="$search_string" 'BEGIN {} {if($0 ~ inp){ s = ""; for (i = 1; i < ch; i++) s = s $i " "; print s; print $ch*scal," "; s = ""; for (i = ch+1; i <= NF; i++) s = s $i " "; print s,"\n" } else print $0,"\n" } END{}' $inputfilename>$outputname
formatting awk perl
Наложения Карт В Android
Я хотел бы спросить, как добавить различные оверлеи в приложение для Android? поскольку у меня уже есть один класс наложения, который расширяет Overlay, и он рисует полилинии в соответствии с некоторыми точками в файле KML. и теперь я хотел бы создать еще один оверлей, который добавляет булавку в пользовательском местоположении с помощью GPS, поэтому я не знаю, как это можно сделать.
пожалуйста, кто-нибудь знает, как мне помочь? заранее спасибо.
android google-maps overlay
Как Играть В Youtube Live На Exoplayer
Я пытаюсь воспроизвести YouTube Live с помощью ExoPlayer на устройстве Android.
Я знаю, что ExoPlayer может играть на YouTube, согласно:
1. Карим Абдель Салам отвечает:
Как воспроизводить видео на YouTube в ExoPlayer в Android?
2. Ответ Тейама:
Потоковое видео в прямом эфире youtube для Android-приложения с exoplayer (DASH)
Но, когда я пытаюсь опубликовать http://www.youtube.com/get_video_info?&video_id=[video_id], я не получаю свойство dashmpd в ответе. Кроме того, я попробовал https://www.youtube.com/get_video_info?&video_id=[video_id]&el=info&ps=default&eurl=&gl=US&hl=ru в соответствии с комментарием Карима Абделла Салама, и здесь я получаю статус = fail & errorcode = 2 & reason = Недопустимые + параметры.
Итак, как мне играть в YouTube с ExoPlayer, если я не могу успешно опубликовать get_video_info?
Примечание. Я попробовал несколько видеороликов YouTube, как Live, так и регулярно.
android exoplayer
Ошибка Памяти С Растровым Изображением И Изображение В Полноэкранном Режиме
Я создаю галерею приложений. Он работал, но так медленно, и после того, как я щелкнул по некоторым изображениям, он получил ошибку из памяти.
FullScreenImageAdapter.java
public class FullScreenImageAdapter extends PagerAdapter {
private Activity _activity;
private ArrayList<String> _imagePaths;
private LayoutInflater inflater;
// constructor
public FullScreenImageAdapter(Activity activity,
ArrayList<String> imagePaths) {
this._activity = activity;
this._imagePaths = imagePaths;
}
@Override
public int getCount() {
return this._imagePaths.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((RelativeLayout) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
TouchImageView imgDisplay;
Button btnClose;
inflater = (LayoutInflater) _activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View viewLayout = inflater.inflate(R.layout.layout_fullscreen_image, container,
false);
imgDisplay = (TouchImageView) viewLayout.findViewById(R.id.imgDisplay);
btnClose = (Button) viewLayout.findViewById(R.id.btnClose);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
//BitmapFactory.decodeFile(pathToImage, bmOptions);
int photoW = options.outWidth;
int photoH = options.outHeight;
int scaleFactor = Math.min(photoW/50, photoH/50);
options.inJustDecodeBounds = false;
options.inSampleSize = 8;
options.inPurgeable = true;
// options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(_imagePaths.get(position), options);
imgDisplay.setImageBitmap(bitmap);
// close button click event
((ViewPager) container).addView(viewLayout);
return viewLayout;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((RelativeLayout) object);
}
}
public class FullScreenViewActivity extends Activity{
private Utils utils;
private FullScreenImageAdapter adapter;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fullscreen_view);
viewPager = (ViewPager) findViewById(R.id.pager);
utils = new Utils(getApplicationContext());
Intent i = getIntent();
int position = i.getIntExtra("position", 0);
adapter = new FullScreenImageAdapter(FullScreenViewActivity.this,
utils.getFilePaths());
viewPager.setAdapter(adapter);
// displaying selected image first
viewPager.setCurrentItem(position);
//adapter.destroyItem(viewPager,position,i);
}
}
GridViewActivity
public class GridViewActivity extends Activity {
private Utils utils;
private ArrayList<String> imagePaths = new ArrayList<String>();
private GridViewImageAdapter adapter;
private GridView gridView;
private int columnWidth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid_view);
gridView = (GridView) findViewById(R.id.grid_view);
utils = new Utils(this);
// Initilizing Grid View
InitilizeGridLayout();
// loading all image paths from SD card
imagePaths = utils.getFilePaths();
// Gridview adapter
adapter = new GridViewImageAdapter(GridViewActivity.this, imagePaths,
columnWidth);
// setting grid view adapter
gridView.setAdapter(adapter);
}
private void InitilizeGridLayout() {
Resources r = getResources();
float padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
AppConstant.GRID_PADDING, r.getDisplayMetrics());
columnWidth = (int) ((utils.getScreenWidth() - ((AppConstant.NUM_OF_COLUMNS + 1) * padding)) / AppConstant.NUM_OF_COLUMNS);
gridView.setNumColumns(AppConstant.NUM_OF_COLUMNS);
gridView.setColumnWidth(columnWidth);
gridView.setStretchMode(GridView.NO_STRETCH);
gridView.setPadding((int) padding, (int) padding, (int) padding,
(int) padding);
gridView.setHorizontalSpacing((int) padding);
gridView.setVerticalSpacing((int) padding);
}
}
-
public class GridViewImageAdapter extends BaseAdapter {
private Activity _activity;
private ArrayList<String> _filePaths = new ArrayList<String>();
private int imageWidth;
public GridViewImageAdapter(Activity activity, ArrayList<String> filePaths,
int imageWidth) {
this._activity = activity;
this._filePaths = filePaths;
this.imageWidth = imageWidth;
}
@Override
public int getCount() {
return this._filePaths.size();
}
@Override
public Object getItem(int position) {
return this._filePaths.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(_activity);
} else {
imageView = (ImageView) convertView;
}
// get screen dimensions
Bitmap image = decodeFile(_filePaths.get(position), imageWidth,
imageWidth);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setLayoutParams(new GridView.LayoutParams(imageWidth,
imageWidth));
imageView.setImageBitmap(image);
// image view click listener
imageView.setOnClickListener(new OnImageClickListener(position));
return imageView;
}
class OnImageClickListener implements OnClickListener {
int _postion;
// constructor
public OnImageClickListener(int position) {
this._postion = position;
}
@Override
public void onClick(View v) {
// on selecting grid view image
// launch full screen activity
Intent i = new Intent(_activity, FullScreenViewActivity.class);
i.putExtra("position", _postion);
_activity.startActivity(i);
}
}
/*
* Resizing image size
*/
public static Bitmap decodeFile(String filePath, int WIDTH, int HIGHT) {
try {
File f = new File(filePath);
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
final int REQUIRED_WIDTH = WIDTH;
final int REQUIRED_HIGHT = HIGHT;
int scale = 1;
while (o.outWidth / scale / 2 >= REQUIRED_WIDTH
&& o.outHeight / scale / 2 >= REQUIRED_HIGHT)
scale *= 2;
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
Таким образом, gridview является настолько медленным, и после щелчка на некоторых изображениях fullsecreenImageView я выхожу из памяти
android out-of-memory bitmap image-gallery
Кодировка Символов В Html Файле С Использованием Webview В Javafx
У меня есть локальный HTML файл, который я хотел бы отображать в WebView, в JavaFX. Это фактически html файл из файла epub. Я, по сути, пытаюсь создать свой собственный зритель.
Файл epub html отображает текст с диакритическими знаками. Большинство из них были обработаны в файлах ebook, используя теги html и CSS, но не все. Например, используется символ "á". Когда я открываю html файл в Chrome, он отображается нормально, но он отображается в моей программе WebView как "Ã".
Я предполагаю, что это кодировка символов. Если я использую значение символа a & # 769, то оно отображается правильно, но мне бы не пришлось проходить через все файлы epub, которые я хочу отобразить, и посмотреть, какие другие символы работают неправильно.
Я сохранил html файл с кодировкой UTF-8, и в любом случае это тот же файл, который читается Chrome и моей программой. Какие-либо предложения?
eclipse html character-encoding javafx-8
Если Существует Оператор Sql В Тайм-Ауте
If exists
(
select 1 from table A join table B
on A.id = B.id
)
BEgin
Select 'Pass'
END
Select 'Fail'
Я запутался с вышеуказанным запросом, который не выполняется вообще, пока он не истечет, когда он завернут в оператор If exists.
Когда выражение
select 1 from table A join table B
on A.id = B.id
выполняется, для получения результата требуется 20 секунд, но когда он завернут его в оператор If exists, он не выполняется вообще, и, наконец, после 4 -5 часов мне пришлось отменить его. Что может быть причиной этого?
sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2
Инъекция Свойств Httphandler С Использованием Ninject, Возвращающая Null
У меня есть следующий httphandler:
public class NewHandler : IHttpHandler
{
[Inject]
public IFile FileReader
{
get;
set;
}
public NewHandler()
{
}
public void ProcessRequest(System.Web.HttpContext context)
{
....
var something = SomeMethod(FileReader);
....
}
public bool IsReusable
{
get
{
return true;
}
}
}
Это мой модуль Ninject в Global.asax.
internal class ServiceModule : NinjectModule
{
public override void Load()
{
Bind<IFile>().To<FileWrapper>().InSingletonScope();
}
}
Каждый раз, когда обработчик срабатывает, FileReader имеет значение NULL. Я что-то упускаю? Правильно ли это сделать инъекцию свойств с помощью Ninject?
Спасибо
ninject asp.net-mvc-2 ninject-2
Проблемы С Работой С Classlist Добавить И Удалить В Реакции
В моем компоненте у меня есть useEffect
добавляющая прослушиватели событий в функцию диапазона, чтобы изменить цвет ползунка. Я могу получить только розовый, чтобы работать повсюду, и синий на неправильном конце слайдера.
В console.log() я вижу все перечисленные классы, но, кажется, работает только розовый. Спасибо.
составная часть
const range = (r) => {
// move gradient
r.addEventListener('input', () => {
// Change slide thumb color on way up
if (r.value > r.max * 0.20) {
r.classList.add('pink')
}
if (r.value > r.max * 0.40) {
r.classList.add('purple')
}
if (r.value > r.max * 0.60) {
r.classList.add('ltpurple')
}
if (r.value > r.max * 0.80) {
r.classList.add('blue')
}
// Change slide thumb color on way down
if (r.value < r.max * 0.20) {
r.classList.remove('pink')
}
if (r.value < r.max * 0.40) {
r.classList.remove('purple')
}
if (r.value < r.max * 0.60) {
r.classList.remove('ltpurple')
}
if (r.value < r.max * 0.80) {
r.classList.remove('blue')
}
// window.requestAnimationFrame(r)
console.log(r.classList)
})
}
useEffect(() => {
Array.from(document.getElementsByClassName('range')).map(r => range(r))
})
JSX
<div className="row">
<h3>Grooming</h3>
<p>Care and health: hair, ears, mouth, nose, lips, face, hands, nails, feet, toes.</p>
<input type="range" className="range blue"
min={0} max={100} name="grooming" onBlur={handleBlur} />
<p>Well groomed: hair, nails, ears, face, hands.</p>
</div>
<div className="row">
<h3>Hygiene</h3>
<p>Hygiene education and awareness. Routine and other daily practices.</p>
<input type="range" className="range blue" onBlur={handleBlur}
min={0} max={100} name="hygiene" />
<p>Demonstrates appropriate hygiene practices.</p>
</div>
reactjs react-hooks
Как Генерировать Случайные Числа В Пакетном Режиме И Превращать Их В Переменные, Чтобы Установить Цвет?
Это сценарий, который я пытался, который не работал:
@echo off
:start
:randomcolors
echo Warning: 1/30 chance to crash
pause>nul
cls
set back1=null
set back2=null
set back3=null
set back4=null
set /a integertype=%random% %% 2+1
if %integertype%==1 set sys=#
if %integertype%==2 set sys=str
if %integertype%==1 set /a back1=%random% %% 9+1
if %integertype%==2 set /a back2=%random% %% 6+1
if back1=null goto skiprc
set color 2=%back3%
goto skiprc2
:skiprc
if %back2%==1 set %back2%=a
if %back2%==2 set %back2%=b
if %back2%==3 set %back2%=c
if %back2%==4 set %back2%=d
if %back2%==5 set %back2%=e
if %back2%==6 set %back2%=f
if %back1%=1 set com1=1
if %back1%=2 set com1=2
if %back1%=3 set com1=3
if %back1%=4 set com1=4
if %back1%=5 set com1=5
if %back1%=6 set com1=6
if %back1%=7 set com1=7
if %back1%=8 set com1=8
if %back1%=9 set com1=9
if %back2%=a set com1=a
if %back2%=b set com1=b
if %back2%=c set com1=c
if %back2%=d set com1=d
if %back2%=e set com1=e
if %back2%=f set com1=f
:skiprc2
:part2
set /a integertype2=%random% %% 2+1
if %integertype2%==1 set sys=number
if %integertype2%==2 set sys=string
if %integertype2%==1 set /a back3=%random% %% 9+1
if %integertype2%==2 set /a back4=%random% %% 6+1
if back3=null goto skiprc3
set color 1=%back3%
goto skiprc4
:skiprc3
if %back4%==1 set %back4%=a
if %back4%==2 set %back4%=b
if %back4%==3 set %back4%=c
if %back4%==4 set %back4%=d
if %back4%==5 set %back4%=e
if %back4%==6 set %back4%=f
:skiprc4
if %back3%=1 set com2=1
if %back3%=2 set com2=2
if %back3%=3 set com2=3
if %back3%=4 set com2=4
if %back3%=5 set com2=5
if %back3%=6 set com2=6
if %back3%=7 set com2=7
if %back3%=8 set com2=8
if %back3%=9 set com2=9
if %back4%=a set com2=a
if %back4%=b set com2=b
if %back4%=c set com2=c
if %back4%=d set com2=d
if %back4%=e set com2=e
if %back4%=f set com2=f
:action
color %com1%%com2%
pause
goto action
random batch-file
Powershell Remoting Не Может Использовать Удаленные Командлеты
Цель:
Я пытаюсь написать сценарий, который будет автоматизировать неявное удаленное время для 100 или более пользователей ежедневно.
Я следую этому руководству дона Джонса; https://technet.microsoft.com/en-us/library/ff720181.aspx
Проблема:
Я получаю сообщение об ошибке после ввода моих пользовательских командлетов, например:
PS > cmdlet1 FooBar
d : The term 'cmdlet1' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ cmdlet1 FooBar
+ ~
+ CategoryInfo : ObjectNotFound: (d:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Мой скрипт:
Set-Alias -Name gm -Value Get-TheModules -Description 'Grabs The Modules'
function Get-TheModules
{
$ServerARM = New-PSSession -ComputerName serverA -Authentication Kerberos
# Import Modules
Write-Verbose -Message 'Importing Custom modules...'
Invoke-command -ScriptBlock { import-module -Name 'Z:\Modules\ModuleA' } -Session $ServerARM
Invoke-command -ScriptBlock { import-module -Name 'Z:\Modules\ModuleB' } -Session $ServerARM
Invoke-command -ScriptBlock { import-module -Name 'Z:\Modules\ModuleC' } -Session $ServerARM
Export-PSSession -Session $ServerARM -commandname *Cmdlet1,Cmdlet2,Cmdlet3* -OutputModule 'CustomCMDlets' -Force -AllowClobber
Remove-PSSession -Session $ServerARM
Import-Module CustomMods -prefix CRem
Write-Verbose -Message 'Custom modules successfully imported...'
}
Результаты запуска сценария:
PS> GM
Directory: Z:\Users\-\Documents\WindowsPowerShell\Modules\CustomCMDlets
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 1/16/2017 1:57 PM 99 CustomCMDlets.format.ps1xml
-a---- 1/16/2017 1:57 PM 801 CustomCMDlets.psd1
-a---- 1/16/2017 1:57 PM 41584 CustomCMDlets.psm1
Custom modules successfully imported...
Вопрос:
Учитывая мою цель и проблему, что я не понимаю в статье, где проблема в моем скрипте?
powershell
Как Отключить/скрыть Трехточечный Индикатор (Индикатор Меню Опций) На Телефонах Ics
Как отключить/скрыть трехточечный индикатор (индикатор меню опций) на телефонах ICS, у которых нет кнопки меню.
Я запускаю приложение как <uses-sdk android:minSdkVersion="5"/>
в манифесте, код скомпилирован с помощью 4.0
. На каждом экране отображается индикатор с тремя точками.
Пример для действий с предпочтениями я не хочу показывать индикатор с тремя точками, так как он не имеет никаких параметров меню.
Добавление android:targetSdkVersion="14"
в манифест работает. Однако не нужно скрывать/удалять три точки на всех экранах. Только в настройках предпочтения не хотят показывать эту кнопку с тремя точками.
android android-4.0
Сделать Изменения "scrollleft" / "scrolltop" Не Запускать Прослушиватель Событий Прокрутки
В настоящее время моя программа находится в месте, где он одновременно слушает, что пользователь прокручивает определенный элемент, но также порой автоматически прокручивает этот элемент сам по себе. (Не постепенный, симпатичный свиток, но мгновенный прыжок. Это имеет смысл в контексте, клянусь.)
Есть ли способ сделать событие прокрутки не срабатывающим, если прокрутка была выполнена путем установки scrollLeft или scrollTop? Моя первая мысль была основным переключателем, например:
ignoreScrollEvents = true;
element.scrollLeft = x;
ignoreScrollEvents = false;
function onScroll() {
if(ignoreScrollEvents) return false;
}
но поскольку события не запускаются немедленно (oops, duhh), это не выполнимое решение. Какие еще ответы я мог бы попробовать? Я также использую jQuery, если это что-то помогает.
javascript jquery html
Wordpress На Iis Дает Ошибку Http 404.3 - Не Найден
Я просто установил Wordpress на сервере Windows 2016. Я использую IIS в качестве веб-сервера для этого и создал веб-сайт на порту 81. Он работает нормально локально (http://localhost: 81), но когда я обращаюсь к сайту за пределами сервера (с моего ноутбука: http://servername: 81) Я получаю
Ошибка HTTP 404.3 - Не найдено. Запрошенная вами страница не может быть выполнена из-за конфигурации расширения. Если страница является скриптом, добавьте обработчик. Если файл должен быть загружен, добавьте MIME-карту.
как в Edge, так и в Chrome.
Я добавил отображение обработчика FastCGI в IIS. Есть идеи, как это решить?
С уважением, Нильс
iis wordpress
Безопасность Данных Sql Server В Сценарии Потерянного Ноутбука
Ситуация - ноутбук с Windows XP с паролем, необходимым для входа в систему, и база данных, работающая в Microsoft Sql Server Developer, с проверкой подлинности Windows.
Меня попросили исследовать, насколько безопасна информация в том случае, если ноутбук потерян или украден. Я не совсем уверен, как охарактеризовать его. Он кажется довольно защищенным от того, кто только пользователь компьютерного приложения, если у него нет пароля.
Какой уровень IT/хакерских навыков необходим для восстановления данных без пароля? Любой хороший ИТ-парень? Любой хороший администратор базы данных? J Случайный хакер? Нам интересна информация о краже идентификационной информации: имя, адрес, SSN и т.д.
security sql-server
Отклонение Класса, Поскольку Он Не Прошел Проверку Времени Компиляции
Я пытаюсь интегрировать curve25519-java из openwhispersystems в свое приложение для Android и компилировать его с помощью API 23 (Marshmallow). При использовании не родного кода я получаю это исключение во время выполнения:
java.lang.VerifyError: Rejecting class org.whispersystems.curve25519.java.fe_mul because it failed compile-time verification (declaration of 'org.whispersystems.curve25519.java.fe_mul' appears in /data/app/com.fenritz.safecam-1/base.apk)
at org.whispersystems.curve25519.java.ge_madd.ge_madd(ge_madd.java:65)
at org.whispersystems.curve25519.java.ge_scalarmult_base.ge_scalarmult_base(ge_scalarmult_base.java:96)
at org.whispersystems.curve25519.java.curve_sigs.curve25519_keygen(curve_sigs.java:30)
at org.whispersystems.curve25519.BaseJavaCurve25519Provider.generatePublicKey(BaseJavaCurve25519Provider.java:50)
at org.whispersystems.curve25519.JavaCurve25519Provider.generatePublicKey(JavaCurve25519Provider.java:8)
at org.whispersystems.curve25519.Curve25519.generateKeyPair(Curve25519.java:70)
at com.fenritz.safecam.SafeCameraActivity.onCreate(SafeCameraActivity.java:105)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Класс, который отклоняется, следующий:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package org.whispersystems.curve25519.java;
public class fe_mul {
public fe_mul() {
}
public static void fe_mul(int[] h, int[] f, int[] g) {
int f0 = f[0];
int f1 = f[1];
int f2 = f[2];
int f3 = f[3];
int f4 = f[4];
int f5 = f[5];
int f6 = f[6];
int f7 = f[7];
int f8 = f[8];
int f9 = f[9];
int g0 = g[0];
int g1 = g[1];
int g2 = g[2];
int g3 = g[3];
int g4 = g[4];
int g5 = g[5];
int g6 = g[6];
int g7 = g[7];
int g8 = g[8];
int g9 = g[9];
int g1_19 = 19 * g1;
int g2_19 = 19 * g2;
int g3_19 = 19 * g3;
int g4_19 = 19 * g4;
int g5_19 = 19 * g5;
int g6_19 = 19 * g6;
int g7_19 = 19 * g7;
int g8_19 = 19 * g8;
int g9_19 = 19 * g9;
int f1_2 = 2 * f1;
int f3_2 = 2 * f3;
int f5_2 = 2 * f5;
int f7_2 = 2 * f7;
int f9_2 = 2 * f9;
long f0g0 = (long)f0 * (long)g0;
long f0g1 = (long)f0 * (long)g1;
long f0g2 = (long)f0 * (long)g2;
long f0g3 = (long)f0 * (long)g3;
long f0g4 = (long)f0 * (long)g4;
long f0g5 = (long)f0 * (long)g5;
long f0g6 = (long)f0 * (long)g6;
long f0g7 = (long)f0 * (long)g7;
long f0g8 = (long)f0 * (long)g8;
long f0g9 = (long)f0 * (long)g9;
long f1g0 = (long)f1 * (long)g0;
long f1g1_2 = (long)f1_2 * (long)g1;
long f1g2 = (long)f1 * (long)g2;
long f1g3_2 = (long)f1_2 * (long)g3;
long f1g4 = (long)f1 * (long)g4;
long f1g5_2 = (long)f1_2 * (long)g5;
long f1g6 = (long)f1 * (long)g6;
long f1g7_2 = (long)f1_2 * (long)g7;
long f1g8 = (long)f1 * (long)g8;
long f1g9_38 = (long)f1_2 * (long)g9_19;
long f2g0 = (long)f2 * (long)g0;
long f2g1 = (long)f2 * (long)g1;
long f2g2 = (long)f2 * (long)g2;
long f2g3 = (long)f2 * (long)g3;
long f2g4 = (long)f2 * (long)g4;
long f2g5 = (long)f2 * (long)g5;
long f2g6 = (long)f2 * (long)g6;
long f2g7 = (long)f2 * (long)g7;
long f2g8_19 = (long)f2 * (long)g8_19;
long f2g9_19 = (long)f2 * (long)g9_19;
long f3g0 = (long)f3 * (long)g0;
long f3g1_2 = (long)f3_2 * (long)g1;
long f3g2 = (long)f3 * (long)g2;
long f3g3_2 = (long)f3_2 * (long)g3;
long f3g4 = (long)f3 * (long)g4;
long f3g5_2 = (long)f3_2 * (long)g5;
long f3g6 = (long)f3 * (long)g6;
long f3g7_38 = (long)f3_2 * (long)g7_19;
long f3g8_19 = (long)f3 * (long)g8_19;
long f3g9_38 = (long)f3_2 * (long)g9_19;
long f4g0 = (long)f4 * (long)g0;
long f4g1 = (long)f4 * (long)g1;
long f4g2 = (long)f4 * (long)g2;
long f4g3 = (long)f4 * (long)g3;
long f4g4 = (long)f4 * (long)g4;
long f4g5 = (long)f4 * (long)g5;
long f4g6_19 = (long)f4 * (long)g6_19;
long f4g7_19 = (long)f4 * (long)g7_19;
long f4g8_19 = (long)f4 * (long)g8_19;
long f4g9_19 = (long)f4 * (long)g9_19;
long f5g0 = (long)f5 * (long)g0;
long f5g1_2 = (long)f5_2 * (long)g1;
long f5g2 = (long)f5 * (long)g2;
long f5g3_2 = (long)f5_2 * (long)g3;
long f5g4 = (long)f5 * (long)g4;
long f5g5_38 = (long)f5_2 * (long)g5_19;
long f5g6_19 = (long)f5 * (long)g6_19;
long f5g7_38 = (long)f5_2 * (long)g7_19;
long f5g8_19 = (long)f5 * (long)g8_19;
long f5g9_38 = (long)f5_2 * (long)g9_19;
long f6g0 = (long)f6 * (long)g0;
long f6g1 = (long)f6 * (long)g1;
long f6g2 = (long)f6 * (long)g2;
long f6g3 = (long)f6 * (long)g3;
long f6g4_19 = (long)f6 * (long)g4_19;
long f6g5_19 = (long)f6 * (long)g5_19;
long f6g6_19 = (long)f6 * (long)g6_19;
long f6g7_19 = (long)f6 * (long)g7_19;
long f6g8_19 = (long)f6 * (long)g8_19;
long f6g9_19 = (long)f6 * (long)g9_19;
long f7g0 = (long)f7 * (long)g0;
long f7g1_2 = (long)f7_2 * (long)g1;
long f7g2 = (long)f7 * (long)g2;
long f7g3_38 = (long)f7_2 * (long)g3_19;
long f7g4_19 = (long)f7 * (long)g4_19;
long f7g5_38 = (long)f7_2 * (long)g5_19;
long f7g6_19 = (long)f7 * (long)g6_19;
long f7g7_38 = (long)f7_2 * (long)g7_19;
long f7g8_19 = (long)f7 * (long)g8_19;
long f7g9_38 = (long)f7_2 * (long)g9_19;
long f8g0 = (long)f8 * (long)g0;
long f8g1 = (long)f8 * (long)g1;
long f8g2_19 = (long)f8 * (long)g2_19;
long f8g3_19 = (long)f8 * (long)g3_19;
long f8g4_19 = (long)f8 * (long)g4_19;
long f8g5_19 = (long)f8 * (long)g5_19;
long f8g6_19 = (long)f8 * (long)g6_19;
long f8g7_19 = (long)f8 * (long)g7_19;
long f8g8_19 = (long)f8 * (long)g8_19;
long f8g9_19 = (long)f8 * (long)g9_19;
long f9g0 = (long)f9 * (long)g0;
long f9g1_38 = (long)f9_2 * (long)g1_19;
long f9g2_19 = (long)f9 * (long)g2_19;
long f9g3_38 = (long)f9_2 * (long)g3_19;
long f9g4_19 = (long)f9 * (long)g4_19;
long f9g5_38 = (long)f9_2 * (long)g5_19;
long f9g6_19 = (long)f9 * (long)g6_19;
long f9g7_38 = (long)f9_2 * (long)g7_19;
long f9g8_19 = (long)f9 * (long)g8_19;
long f9g9_38 = (long)f9_2 * (long)g9_19;
long h0 = f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 + f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38;
long h1 = f0g1 + f1g0 + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 + f7g4_19 + f8g3_19 + f9g2_19;
long h2 = f0g2 + f1g1_2 + f2g0 + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 + f7g5_38 + f8g4_19 + f9g3_38;
long h3 = f0g3 + f1g2 + f2g1 + f3g0 + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19;
long h4 = f0g4 + f1g3_2 + f2g2 + f3g1_2 + f4g0 + f5g9_38 + f6g8_19 + f7g7_38 + f8g6_19 + f9g5_38;
long h5 = f0g5 + f1g4 + f2g3 + f3g2 + f4g1 + f5g0 + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19;
long h6 = f0g6 + f1g5_2 + f2g4 + f3g3_2 + f4g2 + f5g1_2 + f6g0 + f7g9_38 + f8g8_19 + f9g7_38;
long h7 = f0g7 + f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g0 + f8g9_19 + f9g8_19;
long h8 = f0g8 + f1g7_2 + f2g6 + f3g5_2 + f4g4 + f5g3_2 + f6g2 + f7g1_2 + f8g0 + f9g9_38;
long h9 = f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0;
long carry0 = h0 + 33554432L >> 26;
h1 += carry0;
h0 -= carry0 << 26;
long carry4 = h4 + 33554432L >> 26;
h5 += carry4;
h4 -= carry4 << 26;
long carry1 = h1 + 16777216L >> 25;
h2 += carry1;
h1 -= carry1 << 25;
long carry5 = h5 + 16777216L >> 25;
h6 += carry5;
h5 -= carry5 << 25;
long carry2 = h2 + 33554432L >> 26;
h3 += carry2;
h2 -= carry2 << 26;
long carry6 = h6 + 33554432L >> 26;
h7 += carry6;
h6 -= carry6 << 26;
long carry3 = h3 + 16777216L >> 25;
h4 += carry3;
h3 -= carry3 << 25;
long carry7 = h7 + 16777216L >> 25;
h8 += carry7;
h7 -= carry7 << 25;
carry4 = h4 + 33554432L >> 26;
h5 += carry4;
h4 -= carry4 << 26;
long carry8 = h8 + 33554432L >> 26;
h9 += carry8;
h8 -= carry8 << 26;
long carry9 = h9 + 16777216L >> 25;
h0 += carry9 * 19L;
h9 -= carry9 << 25;
carry0 = h0 + 33554432L >> 26;
h1 += carry0;
h0 -= carry0 << 26;
h[0] = (int)h0;
h[1] = (int)h1;
h[2] = (int)h2;
h[3] = (int)h3;
h[4] = (int)h4;
h[5] = (int)h5;
h[6] = (int)h6;
h[7] = (int)h7;
h[8] = (int)h8;
h[9] = (int)h9;
}
}
Любые идеи, почему это отвергается и как я могу это исправить.
java android elliptic-curve
Пароль Ресурса Tomcat Context.xml Не Позволяет Использовать Специальные Символы
Я пытаюсь добавить источник данных в tomcat conf/context.xml, как показано ниже.
<Resource name="jdbc/DS1"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://121.111.11.91;databaseName=DB_NAME"
username="testUanme"
password="TT&123$"
maxPoolSize="50"
removeAbandoned="true"
removeAbandonedTimeout="1000"
logAbandoned="true"
/>
После того, как вы установили запись источника данных в файл конфигурации, перезапустите tomcat и получите ошибку, например:
Ссылка на объект "TT" должна заканчиваться символом ';' разделитель.
Пароль не позволяет использовать специальные символы, которые я использовал & и $.
Пожалуйста, предложите, что должно быть там, что позволяет мне вводить специальные символы в пароле.
Заранее спасибо.
tomcat6
Пользовательский Инструмент Не Отображает View, Laravel Nova
Я просто выполнил все шаги, чтобы создать собственный инструмент Laravel/Nova/custom/tools. Но он не отображает представление по умолчанию, нет ошибки консоли (js) или php, но вид пуст.
namespace Mihrbi\CompanyConfig; use Laravel\Nova\Nova; use Laravel\Nova\Tool; class CompanyConfig extends Tool { /** * Perform any tasks that need to happen when the tool is booted. * * @return void */ public function boot() { // Nova::script('company-config', __DIR__.'/../dist/js/tool.js'); // Nova::style('company-config', __DIR__.'/../dist/css/tool.css'); Nova::serving(function (ServingNova $event) { Nova::script('company-config', __DIR__.'/../dist/js/tool.js'); Nova::style('company-config', __DIR__.'/../dist/css/tool.css'); }); } /** * Build the view that renders the navigation links for the tool. * * @return \Illuminate\View\View */ public function renderNavigation() { return view('company-config::navigation'); } }
это единственные изменения, которые я сделал, чтобы использовать Nova ::, чтобы избежать "nova-api/scripts/company-config 500 (Internal Server Error)",
Это происходит, когда я удаляю продукт Nova :: serve и npm rund
local.ERROR: file_get_contents (/home/site/nova-components/CompanyConfig/src/../dist/css/tool.css): не удалось открыть поток: нет такого файла или каталога
здесь мой пакет.json
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"cross-env": "^5.0.0",
"laravel-mix": "^1.0"
},
"dependencies": {
"vue": "^2.5.0"
}
}
php laravel laravel-nova
Uiviewcontroller Не Деинициализирует (Mvvm + Координаторы)
Из-за этой проблемы у меня болит голова. Почему мой SplashscreenViewController не деинициализирует? Вы, ребята, видите какие-либо потенциальные циклы удержания кода ниже? Я попытался проверить стек Malloc, но не нашел никакой полезной информации.
final class SplashscreenViewController: UIViewController {
var viewModel: SplashscreenViewModelType!
private let animationStartScale: CGFloat = 0.75
private let animationEndScale: CGFloat = 1.0
private let animationDuration: TimeInterval = 0.4
private let splashscreenDuration: TimeInterval = 1.5
@IBOutlet private weak var logoImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
animateLogo(scale: animationStartScale)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
DispatchQueue.main.asyncAfter(deadline: .now() + splashscreenDuration, execute: { [weak self] in
self?.viewModel.onFinish.onNext(())
})
}
private func animateLogo(scale: CGFloat) {
UIView.animate(withDuration: animationDuration, animations: {
self.transformImage(scale: scale)
}, completion: { _ in
if scale == self.animationStartScale {
self.animateLogo(scale: self.animationEndScale)
} else {
self.animateLogo(scale: self.animationStartScale)
}
})
}
private func transformImage(scale: CGFloat) {
logoImageView.transform = CGAffineTransform(scaleX: scale, y: scale)
}
}
Класс, который содержит экземпляр SplaschreenViewController, является его координатором. Код ниже:
final class SplashscreenCoordinator: BaseCoordinator {
private let window: UIWindow
init(window: UIWindow) {
self.window = window
}
override func start() -> Observable<Void> {
let vc: SplashscreenViewController = SwinjectStoryboard.instantiateInitialViewController()
window.rootViewController = vc
window.makeKeyAndVisible()
let onFinish = vc.viewModel.onFinish
.asObservable()
.flatMap { [unowned self] _ -> Observable<Void> in
guard self.window.rootViewController == vc else {
return Observable<Void>.empty()
}
if UserPreferencesManager.isLoggedIn() {
return self.startAppForLoggedInUser()
} else {
return self.startAppForAnonymousUser()
}
}
return onFinish
}
private func startAppForLoggedInUser() -> Observable<Void> {
let tabBar = TabBarCoordinator(window: window)
return coordinate(to: tabBar)
}
private func startAppForAnonymousUser() -> Observable<Void> {
let startCoordinator = StartCoordinator(window: window)
return coordinate(to: startCoordinator)
}
}
И некоторый код из BaseCoordinator:
...
private func store(coordinator: BaseCoordinator) {
childCoordinators[coordinator.identifier] = coordinator
}
private func free(coordinator: BaseCoordinator) {
childCoordinators[coordinator.identifier] = nil
}
func coordinate(to coordinator: BaseCoordinator) -> Observable<Void> {
store(coordinator: coordinator)
return coordinator.start()
.do(onNext: { [weak self] _ in
self?.free(coordinator: coordinator)
})
}
...
Заранее благодарю за ваши ответы!
swift mvvm rx-swift swinject
Почему Сериализация Double [] Не Работает В Wince?
У меня есть объект с (де-) сериализует его конфигурацию через system.xml.serializer
Конфигурация в классе выглядит следующим образом:
public struct Phase
{
public Int16 Trafo;
public KorrekturWerte Spannung;
public KorrekturWerte Strom;
[XmlArray("Min")]
public double[] Min;
[XmlArray("Max")]
public double[] Max;
public bool CheckThis;
}
public class ParameterHardware
{
public string WAGOId = "00:30:DE:05:33:CB";
public Byte Phasen = 0x07;
public Phase L1;
public Phase L2;
public Phase L3;
}
(De-) Сериализация этого в WindowsXP-системе работает очень хорошо, но в Windows CE Min/Max-Array просто рушится после дезактивации и затем ресериализуется ( "CheckThis" был помещен туда как тест и следует после сериализации значений "Strom" ). Поскольку KorrekturWerte снова является структурой, глубина не может быть проблемой. [XmlArray...] не было в моей первой версии, это просто из другого теста.
Edit:
-
Проблема не (только) в сериализации. Пытаюсь получить доступ к Min [...] Я получаю ошибку нулевой ссылки.
-
Возможно, это не ясно: у меня есть сериализация класса, который содержит все значения. Уничтожьте его, чтобы инициализировать класс, а затем повторите его как проверку отладки. Теперь поля отсутствуют. (Исходный файл был сериализован в XP, где он работает правильно)
-
Смена двойного [] на список не помогает. (Тот же результат)
-
xml файлы: Оригинал:
00: 30: DE: 05: 53: 65 1 50 -0,2 1 0,004 0,994 0 0 0 0 0 500 32 15000 15000 1 правда 50 0 1 0 1 0 0 0 0 0 500 32 15000 15000 1 50 0 1 0 1 0 0 0 0 0 500 32 15000 15000 1
Повторная инициализация (извините, CE сериализуется в одной строке):
<?xml version="1.0" encoding="utf-8"?><ClassTest_FCT_Extern xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Hardware><WAGOId>00:30:DE:05:53:65</WAGOId><Phasen>1</Phasen><L1><Trafo>50</Trafo><Spannung><Offset>-0.2</Offset><Steigung>1</Steigung></Spannung><Strom><Offset>0.004</Offset><Steigung>0.994</Steigung></Strom><CheckThis>true</CheckThis></L1><L2><Trafo>50</Trafo><Spannung><Offset>0</Offset><Steigung>1</Steigung></Spannung><Strom><Offset>0</Offset><Steigung>1</Steigung></Strom><CheckThis>false</CheckThis></L2><L3><Trafo>50</Trafo><Spannung><Offset>0</Offset><Steigung>1</Steigung></Spannung><Strom><Offset>0</Offset><Steigung>1</Steigung></Strom><CheckThis>false</CheckThis></L3></ClassTest_FCT_Extern>
-
Извините за то, что вы нанесли все кусочки ломтиками. Вот код сериализации (с использованием System.Xml.Serialization;)
try { fstream = new FileStream(filepath, FileMode.Open, FileAccess.Read); reader = new XmlTextReader(fstream); serializer = new XmlSerializer(typeof(T)); retobj = (T)serializer.Deserialize(reader); } catch (Exception e) { Debug("Serialization: "+e.ToString()); retobj = Activator.CreateInstance<T>(); }
Отладка не вызывается, поэтому ошибок не возникает.
- Версия .net 2.0.
c# .net windows-ce xml-serialization